我知道在OpenCV 2.1中我们有一个函数来设置ROI:cvSetImageROI(),但是这个函数在2.4中不存在(或者至少我不能在它的手册中找到它并且帮助。部分)了解openCV感兴趣的区域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函数给出的,尺寸和他们想要添加的小徽标相同。
然后,这是什么使我困惑:cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);
在这里addWeighted的来源1是ROI尺寸设置,来源2是标志,目的地也是ROI尺寸设置。它是否正确?或者我错过了什么?
在此之后,结果显示与标志添加到大图像。包括这些命令在内的大图。
另外,在问这里之前,我想亲自尝试一下代码,以便澄清情况。但我得到这个错误,因为像()不承认:'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;
}
太好了。非常感谢。这就是我陷入困惑的原因,我认为形象是一种功能,并没有发现任何关于大影像的提及。谢谢你清除这个。关于这个主题的最后一个问题是,如何找到矩形顶点的像素位置。我的意思是,假设我想将我的标识添加到src 1的左上角,然后在src1中(Rect(385,270,logo.cols,logo.rows));“我应该用什么位置代替上述385,270?有没有简单的方法来找到这个?谢谢 – StuckInPhD
您可以使用ROI内的坐标,即图像中的385,270对应于ROI中的0,0。只要你使用cv :: Mat的访问器,就像Mat :: at(int row,int col)一样。如果直接使用原始数据,则必须注意ROI中的实际数据布局是原始图像的数据布局 – remi