将较小的 Mat 复制到较大的 Mat OpenCv For Unity
Copy smaller Mat to larger Mat OpenCv For Unity
我正在尝试使用较小的图像垫并将其复制到较大的垫子中,以便在保持图像纵横比的同时调整它的大小。所以,基本上是这样的:
到目前为止,这是我编写的代码:
private Mat MakeMatFrame(Texture2D image)
{
// Texture must be of right input size
Mat img_mat = new Mat(image.height, image.width, CvType.CV_8UC4, new Scalar(0, 0, 0, 255));
texture2DToMat(image, img_mat);
return img_mat;
}
private void letterBoxImage(Texture2D image)
{
// Get input image as a mat
Mat source = MakeMatFrame(image);
// Create the mat that the source will be put in
int col = source.cols();
int row = source.rows();
int _max = Math.Max(col, row);
Mat resized = Mat.zeros(_max, _max, CvType.CV_8UC4);
// Fill resized
Mat roi = new Mat(resized, new Rect(0, 0, col, row));
source.copyTo(roi);
Texture2D tex2d = new Texture2D(resized.cols(), resized.rows());
matToTexture2D(resized, tex2d);
rawImage.texture = tex2d;
}
我所看到的一切都告诉我这是正确的方法(获取感兴趣的区域,将其填入)。但是我没有得到灰色区域上方 children 的第三张图像,我只有一个灰色区域。
换句话说,图像没有正确复制。我也尝试过使用 submat,但失败得很惨。
我一直在寻找有关如何使用 OpenCv For Unity 执行此类操作的 C# 代码,但我只能找到 C++ 代码。这告诉我要这样做。
Mats 是否有某种我不知道的“应用更改”功能?我是否错误地选择了感兴趣的区域?还是其他原因?
抱歉我的英语不好,但是你的代码有一个错误。
Mat roi = new Mat(resized, new Rect(0, 0, col, row));
图像已复制到 roi,但此垫子与调整大小无关 Mat.so 你必须这样做:
Rect roi=new Rect(0,0,width,height);
source.copyto(resized.submat(roi));
我正在尝试使用较小的图像垫并将其复制到较大的垫子中,以便在保持图像纵横比的同时调整它的大小。所以,基本上是这样的:
到目前为止,这是我编写的代码:
private Mat MakeMatFrame(Texture2D image)
{
// Texture must be of right input size
Mat img_mat = new Mat(image.height, image.width, CvType.CV_8UC4, new Scalar(0, 0, 0, 255));
texture2DToMat(image, img_mat);
return img_mat;
}
private void letterBoxImage(Texture2D image)
{
// Get input image as a mat
Mat source = MakeMatFrame(image);
// Create the mat that the source will be put in
int col = source.cols();
int row = source.rows();
int _max = Math.Max(col, row);
Mat resized = Mat.zeros(_max, _max, CvType.CV_8UC4);
// Fill resized
Mat roi = new Mat(resized, new Rect(0, 0, col, row));
source.copyTo(roi);
Texture2D tex2d = new Texture2D(resized.cols(), resized.rows());
matToTexture2D(resized, tex2d);
rawImage.texture = tex2d;
}
我所看到的一切都告诉我这是正确的方法(获取感兴趣的区域,将其填入)。但是我没有得到灰色区域上方 children 的第三张图像,我只有一个灰色区域。
换句话说,图像没有正确复制。我也尝试过使用 submat,但失败得很惨。
我一直在寻找有关如何使用 OpenCv For Unity 执行此类操作的 C# 代码,但我只能找到 C++ 代码。这告诉我要这样做。
Mats 是否有某种我不知道的“应用更改”功能?我是否错误地选择了感兴趣的区域?还是其他原因?
抱歉我的英语不好,但是你的代码有一个错误。
Mat roi = new Mat(resized, new Rect(0, 0, col, row));
图像已复制到 roi,但此垫子与调整大小无关 Mat.so 你必须这样做:
Rect roi=new Rect(0,0,width,height);
source.copyto(resized.submat(roi));