2011-10-30 8 views
7

ROIは、四角形でのみ実装できます。しかし、ROIとして設定したい輪郭があります。輪郭を矩形ではなくROIとしてどのように使うのか誰にでも分かりますか?OpenCVでROIを使用していますか?

そうでない場合は、どのようにして特定の輪郭のピクセルでのみアクションをフォーカスできますか?

ありがとうございました

PS:これらのOpenCV質問には申し訳ありません。ちょうど本当に混乱しています:$

+0

タイトルに入力ミスがあります。また、ほとんどのOpenCV関数はマスクパラメータを持ち、マスクが特別な値を持つ入力領域でのみ動作します。あなたは実際に何をしたいのですか? –

+1

定義済みの輪郭のピクセルに対してヒストグラムの逆投影を使用したいと思います。ですから、基本的には、白黒のマスクを作成して、それを塗りつぶした輪郭を作成し、ヒストグラム逆投影を使用したい画像のマスクとして使用しますか? – user1017485

+0

等高線でマスキングする前に提案されているように、等高線のピクセルを取得することができない場合は、輪郭を描きます(黒で白、元の画像でマスクとして使用します)。 – AruniRC

答えて

7

OpenCVは、四角形のROIだけをサポートしています。

ただし、特定のピクセルに対して何らかの処理を行うには、いくつかのヘルパー関数を使用できます。

pointPolygonTest()は1つのピクセルがポリゴンではないことを示します。

ですから、

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で推薦し1です。

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

関連する問題