了解openCV 2.4中感兴趣的区域

时间:2012-10-03 09:43:41

标签: c++ opencv

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

然而,这是我能找到的唯一有用的代码,它使用opencv 2.4进行法师投资回报率,但我无法理解它:

// 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 个答案:

答案 0 :(得分:21)

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)。顺便说一句,你不应该忘记先阅读你的大图!