OpenCV:并发GetSubImage以提取图像的一部分

时间:2016-09-06 10:39:10

标签: opencv crop roi opencvsharp

我已经实现了GetSubImage功能,以便提取图像的一部分。我使用SetROICopyResetROI。但是,当并行任务使用相同的图像时,这不起作用,因为SetROI不可并行化。

提取可以并发运行的图像部分的任何其他方法吗?

2 个答案:

答案 0 :(得分:1)

您可以创建仅指向矩阵一部分的临时矩阵标头。然后,您可以在该标头上使用copyTo()成员函数。 C ++中的示例:

Mat GetSubImage(const Mat& source, const Rect &region)
{
    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;
    }