2017-08-17 23 views
0

我現在有手部檢測代碼,當檢測到手部時會在手部周圍創建一個綠色矩形。但是,我想用另一個jpeg圖像填充矩形。我正在考慮使用ImagePattern將圖像嵌入到形狀中,但在我的程序中似乎不起作用。將jpg圖像加載到mat frame 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. 現在sencond圖像複製到子陣列

    src2.copyTo(子陣列);

注:複製之前,確保第二圖像的大小是一樣的矩形,如果沒有可以使用Imgprc類的resize()功能調整墊。就是這樣。

更新:下面是例子。

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,然後轉換爲一個mat(因爲源圖像'frame'是一個mat)。所以src是frame,src2是轉換後的bufferImage。我不知道自己做錯了什麼,但圖像仍未顯示。請向上滾動以查看我是如何製作Mat src2 – hahahahahahahah

+0

您不需要使用Java ImageIO來讀取圖像文件,就可以使用OpenCV'Imgcodecs'類讀取和寫入圖像。現在更新你的問題了。請注意,OpenCV中的所有圖像格式必須是Mat對象,BufferedImage不是OpenCV數據類型。 –

+0

非常感謝!我將試驗並閱讀更多關於此的信息,以便我可以將圖片背景的加載透明 – hahahahahahahah