了解 openCV 2.4 中的感兴趣区域

Posted

技术标签:

【中文标题】了解 openCV 2.4 中的感兴趣区域【英文标题】:Understanding region of interest in openCV 2.4 【发布时间】:2012-10-03 09:43:40 【问题描述】:

我知道在 OpenCV 2.1 中我们有一个设置 ROI 的函数:cvSetImageROI(),但是在 2.4 中不存在这样的函数(或者至少我在它的手册和帮助部分中找不到它。)

但是,这是我能找到的唯一有用的代码,它使用 opencv 2.4 来获取法师 ROI,但我无法理解它:

// define image ROI
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
// add logo to image 
cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);

在这里他们想在原始图像右下角的大图像中添加一个非常小的日志。

所以我从这里了解到的是,创建了另一个矩阵来保存 ROI。它的尺寸使用 rect 函数给出,尺寸等于他们要添加的小标志的尺寸。

然后 thsi 让我感到困惑:cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI); 这里 addWeighted 的源 1 是 ROI 尺寸集,源 2 是徽标,目标也是 ROI 尺寸集。它是否正确?还是我错过了什么?

在此之后,将显示结果,并将徽标添加到大图像中。这些命令中包含的大图。

在问这里之前,我想自己尝试一下代码,以帮助澄清情况。但我收到此错误,因为无法识别 image():'image': identifier not found

int _tmain(int argc, _TCHAR* argv[])

Mat src1, imageROI, logo;

logo = imread("c:\\car1.jpg", -1);

imageROI= image(Rect(385,270,logo.cols,logo.rows));

addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);


namedWindow("meh", CV_WINDOW_AUTOSIZE);
imshow("meh", imageROI);
waitKey(0);


return 0;

【问题讨论】:

【参考方案1】:
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));

cv::Mat 构造函数接受一个矩形作为参数:

Mat::Mat(const Mat& m, const Rect& roi)

返回一个矩阵,该矩阵指向原始图像的 ROI,位于矩形指定的位置。所以 imageROI 实际上是原始图像“图像”的感兴趣区域(或子图像/子矩阵)。如果您修改 imageROI,它将因此修改原始的、更大的矩阵。

至于你的例子,问题是你从一个不存在的对象(图像)调用构造函数。你应该替换:

imageROI= image(Rect(385,270,logo.cols,logo.rows));

作者:

imageROI= src1(Rect(385,270,logo.cols,logo.rows));

假设 src1 是您想要插入徽标的“大图像”(徽标是 car1.jpg)。顺便说一句,你不应该忘记先阅读你的大图!

【讨论】:

太好了。非常感谢。这就是我感到困惑的原因,我认为图像是一个功能,并没有发现任何提及大图像。感谢您清除它。关于这个主题的最后一个问题是,我如何找到矩形顶点的像素位置。我的意思是假设我想将我的徽标添加到 src 1 的左上角,那么在src1(Rect(385,270,logo.cols,logo.rows)); 中,我应该给出什么位置来代替所说的 385,270?有没有简单的方法可以找到这个?谢谢 您可以使用 ROI 内的坐标,即图像中的 385,270 对应于 ROI 中的 0,0。只要您使用 cv::Mat 的访问器,这将起作用,例如 Mat::at(int row, int col)。如果直接使用原始数据,要注意ROI中的实际数据布局是原始图像的数据布局

以上是关于了解 openCV 2.4 中的感兴趣区域的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV实战——图像感兴趣区域

用Python-OpenCV提取图像中的感兴趣区域以及图像的深拷贝和浅拷贝问题附示例代码

如何在python中的感兴趣区域周围绘制一个矩形

opencv中使用ROI获取感兴趣区域时,如何获取一幅图像中相应的坐标,比如:

opencv图像及视频感兴趣区域设置

如何在这样的视频上选择感兴趣的区域