OpenCV copyTo()掩码错误

时间:2012-07-03 16:30:39

标签: c++ opencv mask

我正在尝试使用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);

虽然没有复制到正确的位置,但仍可正常工作。我该如何解决这个问题?

2 个答案:

答案 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来复制特定区域。