5

希望の位置にある大きな画像に画像を追加しようとしています。addWeighted(src, alpha, water,--,dst,--) を実行してopencvに透かしを追加する方法を見つけましたが、問題は、透かしと表面画像の両方が同じサイズでなければならないことです。

別の方法を見つけました(推測)

Mat srcMat = cvCanvasImage.submat(top/2, (top + height)/2, left/2, (left + width)/2);
Imgproc.cvtColor(mat, srcMat, Imgproc.COLOR_GRAY2BGR,4);

しかし、私はこれを行う方法を理解していません??

ありがとう..

アップデート

     Mat cvCanvasImage = Highgui.imread(Environment.getExternalStorageDirectory() + "/wallpapers/castle.jpg");

 // Small watermark image
Mat cvWaterImage = Highgui.imread(Environment.getExternalStorageDirectory() +"/square.png");

Size canvasSize = cvWaterImage.size();

   int rows = (int) canvasSize.height;
   int cols = (int) canvasSize.width;       
   int left = 0;
   int top = 0;         
   int width = rows;
   int height = cols;

   Rect ROI = new Rect(left, top, width, height);
   Core.addWeighted(cvCanvasImage.submat(ROI), alpha, cvWaterImage, beta, 0, cvCanvasImage.submat(ROI)); 

  //now it throws me this error   

                             "error: (-209) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function void cv::arithm_op(const cv::_InputArray&, const cv::_InputArray&, const cv::_OutputArray&, const cv::_InputArray&, int, void (**)(const uchar*, size_t, const uchar*, size_t, uchar*, size_t, cv::Size, void*), bool, void*)"
4

2 に答える 2

6

私はそれを正しく行う方法を見つけました。

Mat b = Highgui.imread(Environment.getExternalStorageDirectory() + "/castle.jpg");

// Small watermark image
Mat a = Highgui.imread(Environment.getExternalStorageDirectory() +"/square.png");

Mat bSubmat = b.submat(a.rows(), a.rows()*2, a.cols(), a.cols()*2);        
a.copyTo(bSubmat);

Highgui.imwrite("mnt/sdcard/SubmatCopyToTest.png", b);
于 2012-10-23T04:45:11.187 に答える
2

このようなものが動作するはずです:

Mat waterMark = new Mat(width, height); //assumed as a smaller image than your source mat, with size (width, height).

Rect ROI = new Rect(x, y, width, height); // Position and size of your watermark;

Core.addWeighted(source.submat(ROI), alpha, waterMark, beta, gamma, source.submat(ROI));
于 2012-10-04T09:07:26.260 に答える