【发布时间】:2012-05-15 22:06:44
【问题描述】:
我需要将cv::Mat 图像(源)复制到另一个(目标)cv::Mat 图像的 ROI。
我找到了this reference,但它似乎不适用于我的情况。 你有什么指示我如何使用 OpenCV C++ 接口来做到这一点?
【问题讨论】:
我需要将cv::Mat 图像(源)复制到另一个(目标)cv::Mat 图像的 ROI。
我找到了this reference,但它似乎不适用于我的情况。 你有什么指示我如何使用 OpenCV C++ 接口来做到这一点?
【问题讨论】:
OpenCV 2.4:
src.copyTo(dst(Rect(left, top, src.cols, src.rows)));
OpenCV 2.x:
Mat dst_roi = dst(Rect(left, top, src.cols, src.rows));
src.copyTo(dst_roi);
【讨论】:
no matching function for call to ‘cv::Mat::copyTo(cv::Mat)’ viewtest2.cpp:172:61: note: candidates are: /usr/include/opencv2/core/core.hpp:1651:10: note: void cv::Mat::copyTo(cv::OutputArray) const。然而,第二种解决方案确实有效,但它会产生一个只有 src 的图像。
src.copyTo(dst(Rect(left, top, src.cols, src.rows)); 3x '(' 和 2x ')'? Mat dst_roi = dst(Rect(left, top, src.cols, src.rows); 2x '(' 和 1x ')'?未经测试的代码?
除了以上答案的补充或更正,如果你想将一个较小的开放区域Mat复制到另一个Mat,你应该这样做:
src(Rect(left,top,width, height)).copyTo(dst);
【讨论】:
确实以这种方式为我工作:
Mat imgPanel(100, 250, CV_8UC1, Scalar(0));
Mat imgPanelRoi(imgPanel, Rect(0, 0, imgSrc.cols, imgSrc.rows));
imgSrc.copyTo(imgPanelRoi);
imshow("imgPanel", imgPanel);
waitKey();
我正在使用 Opencv 2.4.9 基于安德烈的回答。
【讨论】: