0

opencv 1 C API で書かれた古いプログラムを C++ で opencv2 に移行しています。古いコードは 'CV_IS_SEQ_CLOSED' を使用して、輪郭が閉じているかどうかを確認しています。私はたくさんグーグルで調べましたが、opencv2で同じことをする方法を見つけることができませんでした. まったく同じことを行うための回避策はありますか?

4

1 に答える 1

1

残念ながら、cv::findContours()それが生成する輪郭の開放性または閉鎖性に関する情報は提供されません。さらに、閉じた輪郭は始点と終点が同じであるとは限りません。近似なしで (フラグを渡すことによってCV_CHAIN_APPROX_NONE) 等高線を生成している場合は、等高線の最初の点と最後の点の間の距離が本来よりも小さいことを確認するだけでsqrt(2)十分です。

// 1.5 is approximately sqrt(2)
bool closed = cv::norm(contour.front() - contour.back()) < 1.5;

これは、別の近似方法を使用して保証されるとは思いません。

于 2013-10-02T18:08:54.253 に答える