我已经实现了一个GetSubImage
函数来提取图像的一部分。我使用SetROI
,Copy
和ResetROI
. 但是当并行任务使用相同的图像时,这不起作用,因为SetROI
不可并行化。
还有其他方法可以提取可以并发运行的图像部分吗?
我已经实现了一个GetSubImage
函数来提取图像的一部分。我使用SetROI
,Copy
和ResetROI
. 但是当并行任务使用相同的图像时,这不起作用,因为SetROI
不可并行化。
还有其他方法可以提取可以并发运行的图像部分吗?
您可以创建一个临时矩阵标题,它只指向矩阵的一部分。然后您可以copyTo()
在该标题上使用成员函数。C++ 中的示例:
Mat GetSubImage(const Mat& source, const Rect ®ion)
{
Mat dest;
Mat roi(source, region);
roi.copyTo(dest);
return dest;
}
这样,source
操作的数据和表头都不会受到影响,因此可以并发执行。
最后,为了提取图像的一部分,我使用了这个函数。在 C# 和 OpenCVSharp 包装器上使用:
static public IplImage GetSubImage(IplImage ipl, CvRect r)
{
CvMat submat;
CvMat mat = ipl.GetSubRect(out submat, r);
IplImage i = new IplImage(r.Width, r.Height, ipl.Depth, ipl.NChannels);
Cv.Copy(mat, i);
mat.Dispose();
submat.Dispose();
return i;
}