1

我正在尝试通过 C++ 使用 OpenCV 2.4 中的掩码将较小的图像粘贴到较大的图像中。
没有蒙版,我使用以下代码将小图像复制到大图像:

smallImage.copyTo(largeImage(cv::Rect(pt, smallImage.size()));

wherept的类型为cv::Point2f. 它完美地工作。但是,如果我使用面膜:

smallImage.copyTo(largeImage(cv::Rect(pt, smallImage.size()), mask);

我收到一个错误Mat::create(请参阅文档):

CV_Assert(!fixedType() || (CV_MAT_CN(type) ==
    m.channels() && ((1 << CV_MAT_TYPE(flags)) & fixedDepthMask) != 0));

如果我cv::Rect从我的代码中删除,将其简化为:

smallImage.copyTo(largeImage, mask);

它可以工作,尽管它没有复制到正确的位置。我该如何解决这个问题?

4

2 回答 2

2

以下代码可以正常工作,没有任何错误。

    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);

小图像是大图像的重新调整大小的版本,它在大图像中的黑白 (100,100) 位置复制到 (200,200)。您可以根据自己的要求采用这些线路。

于 2012-07-03T20:28:08.130 回答
0

将图像 scaledImage 粘贴到 resultMat:

 scaledImage.copyTo(resultMat);

但我认为您不能在 Java 中选择一个 roi 来复制到特定区域。

于 2014-01-27T07:23:13.970 回答