感兴趣区域算法(方形)

时间:2014-08-24 05:31:12

标签: algorithm opencv

在opencv中有一个数据类型名称Rect​​,他的一个构造函数是这样的:

Rect(Point pt1,Point pt2)。

然后你可以使用它的方法裁剪Mat

Mat.submat(Rect roi)。

使用此方法,您可以从两个点创建一个正方形,裁剪Mat。

我正在使用其他数据类型,所以我不能使用opencv,我需要知道这个算法是如何实现的,或者我可以在哪里阅读它。

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是循环使用像素并将其复制,见下文。 OpenCV当然使用更优化和复杂的代码 - 您必须浏览源代码才能找到实现。如果你正在寻找一个简单的解决方案而不担心效率,下面的代码段应该有所帮助。

YourImageType ExtractSubImage(YourImageType sourceImage, RECT roi)
{
    YourImageType destImage;
    <Allocate destImage with size same as roi>

    for (int rowSrc = roi.top, rowDst = 0, pixelDst = 0; rowSrc <= roi.bottom; rowSrc++, rowDst++)
    {
        int pixelSrc = sourceImage.width * rowSrc + roi.left;
        for (int colSrc = roi.left, colDst = 0; colSrc <= roi.right; colSrc++, colDst++, pixelSrc++, pixelDst++)
        {
            destImage.buffer(pixelDst) = sourceImage.buffer(pixelSrc);
        }
    }

    return destImage;
}