1

C++経由でOpenCV 2.4のマスクを使用して、小さな画像を大きな画像に貼り付けようとしています。
マスクなしで、次のコードを使用して小さな画像を大きな画像にコピーします。

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

pt型を持ってい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 に答える