2017-08-17 8 views
0

私は手が検出されたときに手の周りに緑の矩形を作成する手検出コードを今すぐ持っています。しかし、私は別のjpeg画像で長方形を塗りつぶしたい。私はImagePatternを使用することを考えていましたが、イメージが私のプログラムではうまくいかないような形に埋め込まれていました。ここマットフレーム上にjpgイメージをロードするopencv java

は手の周りに長方形を作成するための私のコードである:

Imgproc.rectangle(frame, handsArray[i].tl(), handsArray[i].br(), new Scalar(0, 255, 0), 3); 

フレームはマットであるとImgprocはOpenCVの、javacv関数です。

誰かがこの問題を助けてくれますか?私はあなたがこれらの手順でそれを行うことができます

よろしく

Green Rectangle Around The Hand that needs to be filled

BufferedImage bi = null; 
    try { 
     bi = ImageIO.read(new File(trollFace)); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Mat mat = new Mat(bi.getHeight(), bi.getWidth(), CvType.CV_8UC3); 
    byte[] data = ((DataBufferByte) bi.getRaster().getDataBuffer()).getData(); 
    mat.put(0, 0, data); 

答えて

1

を苦労しています:

  1. サブマットあなたの元画像

    マットサブマットから四角形を= SRCを.submat(新しいRect(200,200,100,100));

  2. 今サブマット

    src2.copyTo(サブマット)にsencond画像をコピーします。

注:コピーする前に、あなたがマットのサイズを変更するImgprcクラスのresize()機能を使用することができない場合には、第2の画像の大きさは、長方形と同じである保証。それはそれです。

更新:以下は例です。

Mat src = Imgcodecs.imread("C:\\src1.jpg"); 
Mat src2 = Imgcodecs.imread("C:\\src2.jpg"); 
Imgproc.resize(src2, src2, new Size(100, 100)); 
Mat submat = src.submat(new Rect(200, 200, 100, 100)); 
src2.copyTo(submat); 

// now you can do what you want with the src1 
+0

あなたの言ったことを実装しようとしました。まず、jpgをbufferedImageに変換してからマットに変換します(ソースイメージ 'frame'はマットです)。したがって、srcはフレームであり、src2は変換されたbufferImageです。私が間違っていることは分かりませんが、イメージはまだ表示されません。私がどのようにマットを作りましたかを見てください。src2 – hahahahahahahah

+0

Java ImageIOを使ってイメージファイルを読む必要はありません。イメージを読み書きするためにOpenCV Imgcodecsクラスを使うことができます。あなたは今見ている質問が更新されました。 OpenCVのすべての画像フォーマットはMatオブジェクトでなければならないことに注意してください.VerifiedImageはOpenCVデータタイプではありません。 –

+0

ありがとうございました!私は実験をして、これについてもっと読んで、写真の背景を透明にすることができます。 – hahahahahahahah

関連する問題