1

ピクセル位置を入力して、それに接続されているすべての同じ色 (私の場合は黒にする必要があります) のピクセルを取得できるはずです。C ++を使用してopencvでこれを行う方法。単純に、出力ピクセルを黒色で相互に接続する必要があります。FindContours() メソッドは、ピクセルをフィードできないため機能しません。

4

2 に答える 2

4

OpenCV にはそのような機能がないため、自分で実装する必要があります。簡単な方法は、BFS や DFS のような検索アルゴリズムをツリーに実装することです。

いくつかの擬似コード:

list<pixels> pixels_in_component;
stack<pixels> neighbours;
neighbours.add(starting_point)

while not neightbours.empty:
   p = neighbours.pop();
   pixels_in_component.append(p) 
   for each adjacent pixel n of p:
     if color(n) == color(starting_point):
         neighbours.append(n)

スタックまたはキューを使用する場合は関係なく、pixels_in_component には後で接続されたすべてのピクセルが含まれます。

または (黒いコンポーネントに制限されている場合) cv::Threshold を使用して画像を反転できます。特定の値を超えるすべてのピクセルがゼロにマップされ、しきい値を下回るピクセルが特定の値にマップされる反転バイナリしきい値を使用するだけです。

CV_8UC1 画像がある場合は、threshold( input,output, 1,255, THRESH_BINARY_INV); を呼び出すだけです。

黒のピクセルを 255 にマップし、残りを 0 にマップします。その後、通常の findContours を実行するだけです。

于 2015-04-04T12:50:35.707 に答える