0

opencv findContoursのサンプル コードを使用して輪郭を取得しました。

この画像の輪郭を正しく取得することに成功しました。

しかし、私のプロジェクトでfindContoursを使用すると、輪郭が0ポイント、輪郭ベクトルに数百万のポイント、いくつかのポイントが巨大な数など、間違った輪郭データが取得されます。

以下の私のプロジェクトリストでテストされたコード:

Mat src=imread("data/artists-icon.png",1);
Mat src_gray = Mat::zeros(src.size(), CV_8UC3);
cvtColor(src, src_gray, CV_BGR2GRAY);

imshow("src_gray", src_gray);

Canny(src_gray, src_gray, 100, 200, 3);
imshow("src_gray2", src_gray);

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

waitKey(0);
findContours(src_gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
cout << "contour size: " << contours.size() << endl;

誤差等高線データの画像です

これが正しい等高線データです。

プロジェクトを再作成しましたが、問題はまだ発生しています。

どうすればこの問題を解決できますか?

アップデート:

パス "/" を "\" に変更し、CV_BGR2GRAY の代わりに CV_RGB2GRAY を作成すると、それも間違っています。

以下のグレーとキャニーの出力リストの画像。

オリジナル:i.imgur.com/KXB6OAS.png

灰色:i.imgur.com/y1prHnj.png

キャニー出力:i.imgur.com/UtUzRkh.png

比較:i.imgur.com/lLZ8OBj.jpg

私は自分のプロジェクトでライブラリを使用しています:FLTK、openGL(freeglut、glew)、LinearSystemLib 2005、opencv211 をコンパイルした gpu で使用します。findcontours サンプル コード opencv Web サイトは、私のプロジェクトと同じ opencv ライブラリで構築されています。

4

0 に答える 0