15

我知道在 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;

}

4

1 回答 1

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

于 2012-10-03T10:04:42.253 回答