6

クロージング形態学的操作を実行しましたが、CおよびC ++ API(OpenCV 2.4.2)で異なる結果が得られています

入力:

入力

OpenCV'C'の場合:

//Set ROI
//Perform Gaussian smoothing
//Perform Canny edge analysis
cvMorphologyEx( src, dst, temp, Mat(), MORPH_CLOSE, 5 );

結果:http : //i47.tinypic.com/33e0yfb.png

OpencvC++を使用

//Set ROI 
//Perform Gaussian smoothing 
//Perform Canny edge analysis
cv::morphologyEx( src, dst, cv::MORPH_CLOSE, cv::Mat(), cv::Point(-1,-1), 5 );

結果:http : //i50.tinypic.com/i5vxjo.png

ご覧のとおり、C ++ APIは、白/灰色の境界線の色で出力を生成します。したがって、これらのAPIの両方で結果が異なります。

C ++ APIで別のborderTypeを試しましたが、常に同じ結果が得られます。

C++でCAPIと同じ出力を取得するにはどうすればよいですか?検出された輪郭に影響するので必要です

前もって感謝します

4

3 に答える 3

1

OpenCV v2.4.2 ドキュメントからこのサンプル コードを確認してください。Canny エッジ検出器を使用するために、このコードを確認することもできます。これらがエラーの追跡に役立つことを願っています:)

また、モルフォロジー クロージングは​​冪等演算子であるため、最初の適用を超えて結果を変更することなく、複数回適用できることにも注意してください。

于 2012-08-03T20:14:01.737 に答える
1

デフォルトは、C と C++ の間で同じではありません - 特に構造化要素です。C: デフォルトの構造要素は次のとおりです。

cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_RECT)

一方、C++ では、デフォルトの構造化要素は次のとおりです。

getStructuringElement(MORPH_RECT, Size(1+iterations*2,1+iterations*2));

同じ結果が必要な場合は、すべてのフィールド (アンカーを含む) を指定する必要があります。

于 2012-08-02T12:03:37.670 に答える