2011-10-30 52 views
7

ROI只能用矩形實現。然而,我有一個我想設定爲ROI的輪廓。有沒有人知道我會如何將輪廓用作ROI而不是矩形?在OpenCV中使用ROI?

否則,如果不可能,我怎麼才能將我的動作集中在特定輪廓的像素中?

謝謝

PS:抱歉,所有這些OpenCV問題。只是非常困惑:$

+0

標題中有錯字。此外,大多數OpenCV函數都有一個掩碼參數,並且只能在掩碼具有特殊值的輸入區域進行操作。你究竟想要做什麼? –

+1

我想在預定輪廓的像素上使用直方圖反投影。所以基本上我會創建一個充滿輪廓的黑白遮罩,然後用它作爲我想使用直方圖反投影的圖像的遮罩? – user1017485

+0

如果您不想在輪廓中獲取像素,就像在使用輪廓遮罩之前所建議的那樣(繪製輪廓 - 黑色的白色,然後將其用作原始圖像上的遮罩)是顯而易見的方法。 – AruniRC

回答

7

OpenCV只支持矩形投資回報率。

但是,要對特定像素進行一些處理,可以使用一些輔助函數。

其中之一是pointPolygonTest(),它告訴你一個給定的像素不屬於多邊形。

所以,你可以寫類似

for(i=0;i<height;i++) 
{ 
     for(j=0;j<width;j++) 
     { 
      if(pointPolygonTest(Point(i,j),myPolygon)) 
      { 
       // do some processing 
      } 
     } 
} 

還要檢查該樣品 http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test

另一個(快)選項是一個由@ andeas-haferburg sugested。製作一個模板在新的灰度圖像畫的多邊形:

drawPoly() 

(這樣的背景是0,多邊形爲255),那麼你可以通過一些其他的功能,或自己使用它:

for(i=0;i<height;i++) 
{ 
     for(j=0;j<width;j++) 
     { 
      if(mask[j+w*i])) 
      { 
       // do some processing 
      } 
     } 
} 

上面的例子只是僞代碼,你必須使它工作。

+0

謝謝你幫了很多 – user1017485

+0

@ user1017485你想不通怎麼辦?我有類似的問題。 – Mzk

+0

@ user1017485你有想過嗎?我也想知道如何做到這一點。 – bearzk