我正在尝试使用OpenCV 2.4中的掩码通过C ++将较小的图像粘贴到较大的图像中。
如果没有遮罩,我会使用以下代码将小图像复制到较大的图像:
smallImage.copyTo(largeImage(cv::Rect(pt, smallImage.size()));
其中pt
的类型为cv::Point2f
。它完美地运作。但是,如果我使用面具:
smallImage.copyTo(largeImage(cv::Rect(pt, smallImage.size()), mask);
我从Mat::create
收到错误(请参阅documentation):
CV_Assert(!fixedType() || (CV_MAT_CN(type) ==
m.channels() && ((1 << CV_MAT_TYPE(flags)) & fixedDepthMask) != 0));
如果我从代码中删除cv::Rect
,请将其简化为:
smallImage.copyTo(largeImage, mask);
虽然没有复制到正确的位置,但仍可正常工作。我该如何解决这个问题?
答案 0 :(得分:1)
以下代码可以正常运行。
Mat large_img = imread("C:\\Koala.jpg");
Mat small_img;
resize(large_img,small_img,Size(100,100),1);
small_img.copyTo(large_img (Rect(100,100,100,100)));
imshow("Rsult",large_img);
waitKey(0);
小图像是大图像的重新尺寸版本,并且在大图像中以b / w(100,100)位置复制到(200,200)。您可以根据您的要求采用这些线。
答案 1 :(得分:0)
将图像scaledImage粘贴到resultMat:
scaledImage.copyTo(resultMat);
但我认为你不能选择Java中的roi来复制特定区域。