0

写真内のオブジェクトの輪郭を取得するのに問題があります。

すべてのノイズを削除するために、とを使用adjustROI()Canny()ます。

erode()また、、、、、 ...を試しましたがdillate()、このコードスニペットで画像を鮮明にすることもできました。Laplacian()GaussianBlur()Sobel()

GaussianBlur(src, dst_gaussian, Size(0, 0), 3);

addWeighted(src, 1.5, dst_gaussian, -0.5, 0, dst);

しかし、私の結果は常に同じです。私のオブジェクトは(テレビ画面のノイズのように)白黒の色で塗りつぶされているため、輪郭を取得することはできませんfindContours()findContours()数百万の輪郭を検出しますが、全体の輪郭は検出しません)。オブジェクト。これをdrawContours())で確認します。

私はC++を使用し、画像をグレースケールマットとしてロードします(Cannyの場合はグレースケールである必要があります)。私のオブジェクトはすべての写真で異なる形をしていますが、それは常に写真の真ん中あたりにあります。

画像処理によってより良い色のオブジェクトを取得する方法を見つける必要がありますが、他に何を試すべきかわかりません。または、画像処理後にオブジェクトを色で塗りつぶす方法を見つける必要があります(輪郭がないため、これは私が最後に欲しいもの)。

どんなアイデアでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

ほとんどの場合に機能する解決策を見つけました。確率的ハフ変換を使用してオブジェクトを塗りつぶしますHoughLinesP()

vector<Vec4i> lines;
HoughLinesP(dst, lines, 1, CV_PI/180, 80, 30, 10);
for(size_t i = 0; i < lines.size(); i++)
{
    line(color_dst, Point(lines[i][0], lines[i][1]), Point(lines[i][2], lines[i][3]), Scalar(0,0,255), 3, 8);
}

これは、OpenCVドキュメントが提供するサンプルコードからのものです。

エッジ検出アルゴリズム(などCanny())を使用した後、確率的ハフ変換はバイナリ画像内のオブジェクトを検出します。アルゴリズムは線を見つけます。線は、描画された場合、オブジェクト全体を表します。もちろん、いくつかのパラメータは、ある種の画像に適合させる必要があります。

これがすべての画像またはすべてのオブジェクトで機能するかどうかはわかりませんが、私の場合は機能します。

于 2012-08-10T09:33:05.333 に答える