2015年7月7日 星期二

Emgu 把二個影像合成一個影像

emgu和 opencv在這個部份的操作和我的思考邏輯不同。例如你需要將圖A貼到圖B上的某個位置上。必須在B圖上設定一個ROI的參數,ROI就包含了需要貼上的位置與尺寸大小。然後再利用圖A的CopyTo函數將圖A貼到指定的圖B位置。

在opencv 或是emgu中如何將一個圖像貼到另一個影像之上的細節如下:


第一步 必須確圖B的大小必須比圖A大,否則會造成錯誤的發生。以下一行程式碼是依照指定的長、寬大小建立一個影像並指定顏色。

 Image imageB = new Image(iBwidth, iBHeight, new Bgr(255,255,255));

第二步 然後在這個底圖上建立一個ROI的區域,這個目是要讓需要組合的畫面能放在正確的位置上。


 imageB.ROI = new Rectangle( 10, 10, iAWidth, iAHeight);

 第三步,將要圖A複製到圖B的ROI中

 imageA.CopyTo(imageB);

第四步,將ROI的大小設為零,這個步驟等於是取消底圖上的ROI,
這檥才能讓底圖正常顯示在 imagebox 上。

imageB.ROI = new Rectangle(0, 0, 0, 0);
 程式碼片段



  int iAWidth = 100;
  int iAHeight = 100;
  int iBWidth = 120;
  int iBHeight = 120;
 Image imageA = new Image(iAWidth, iAHeight, new Bgr(255,0,0));
 Image imageB = new Image(iBwidth, iBHeight, new Bgr(255,255,255));

 imageB.ROI = new Rectangle( 10, 10, iAWidth, iAHeight);

 imageA.CopyTo(imageB);


 imageB.ROI = new Rectangle(0, 0, 0, 0);