我已经实现了GetSubImage
功能,以便提取图像的一部分。我使用SetROI
,Copy
和ResetROI
。但是,当并行任务使用相同的图像时,这不起作用,因为SetROI
不可并行化。
提取可以并发运行的图像部分的任何其他方法吗?
答案 0 :(得分:1)
您可以创建仅指向矩阵一部分的临时矩阵标头。然后,您可以在该标头上使用copyTo()
成员函数。 C ++中的示例:
Mat GetSubImage(const Mat& source, const Rect ®ion)
{
Mat dest;
Mat roi(source, region);
roi.copyTo(dest);
return dest;
}
这样,source
的数据和标题都不会受到操作的影响,因此您可以同时执行它。
答案 1 :(得分:1)
最后,要提取图像的一部分,我正在使用此功能。在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;
}