我知道在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);
Run Code Online (Sandbox Code Playgroud)
在这里,他们希望在原始图像右下方的大图像中添加一个非常小的日志.
所以我从这里了解到,创建另一个矩阵来保持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;
Run Code Online (Sandbox Code Playgroud)
}
rem*_*emi 21
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
Run Code Online (Sandbox Code Playgroud)
cv :: Mat构造函数以矩形作为参数:
Mat::Mat(const Mat& m, const Rect& roi)
Run Code Online (Sandbox Code Playgroud)
返回一个矩阵,该矩阵指向原始图像的ROI,位于矩形指定的位置.所以imageROI实际上是原始图像"图像"的感兴趣区域(或子图像/子矩阵).如果修改imageROI,它将因此修改原始的较大矩阵.
至于你的例子,问题是你从一个不存在的对象(图像)调用构造函数.你应该替换:
imageROI= image(Rect(385,270,logo.cols,logo.rows));
Run Code Online (Sandbox Code Playgroud)
通过:
imageROI= src1(Rect(385,270,logo.cols,logo.rows));
Run Code Online (Sandbox Code Playgroud)
假设src1是您想要将徽标插入的"大图像"(徽标为car1.jpg).顺便说一句,你不应该忘记先阅读你的大图!
| 归档时间: |
|
| 查看次数: |
32636 次 |
| 最近记录: |