Contoursプロファイル
1輪郭を探すfindContours
findContoursには、hierarchy階層を出力する必要があるかどうかという2つのインタフェースがあります(プロファイル間関係の解析に使用できますが、一般的には少ないです).
最外層の輪郭を直接探しますRETR_EXTERNAL,結果出力全輪郭点CHAIN_APPROX_NONE
2アウトラインサイズのソート
輪郭を探した後、ほとんどの需要は最大の輪郭を取得することであり、簡単に輪郭周長や輪郭面積に従ってソートすることができます.
ソート関数はstdライブラリを直接使用します.
ソート規則関数ContoursSortFunを別途宣言する必要があります
輪郭周長(輪郭点数)でソート:
輪郭面積でソート:
続いて、contoursの最初の要素contours[0]が最大輪郭となる.
3最大アウトラインの描画
drawContoursの3番目のパラメータが0の場合、最初の輪郭を描画することを示します.最後のパラメータ-1は、描画時に輪郭を塗りつぶし、0より大きい場合は輪郭の厚さを表します.
findContoursには、hierarchy階層を出力する必要があるかどうかという2つのインタフェースがあります(プロファイル間関係の解析に使用できますが、一般的には少ないです).
最外層の輪郭を直接探しますRETR_EXTERNAL,結果出力全輪郭点CHAIN_APPROX_NONE
vector> contours;
findContours(edges_D,contours,RETR_EXTERNAL,CHAIN_APPROX_NONE);
2アウトラインサイズのソート
輪郭を探した後、ほとんどの需要は最大の輪郭を取得することであり、簡単に輪郭周長や輪郭面積に従ってソートすることができます.
ソート関数はstdライブラリを直接使用します.
std::sort(contours.begin(),contours.end(),ContoursSortFun);
ソート規則関数ContoursSortFunを別途宣言する必要があります
輪郭周長(輪郭点数)でソート:
static inline bool ContoursSortFun(vector<:point> contour1,vector<:point> contour2)
{
return (contour1.size() > contour2.size());
}
輪郭面積でソート:
static inline bool ContoursSortFun(vector<:point> contour1,vector<:point> contour2)
{
return (cv::contourArea(contour1) > cv::contourArea(contour2));
}
続いて、contoursの最初の要素contours[0]が最大輪郭となる.
3最大アウトラインの描画
Mat Img(edges_D.size(),CV_8UC3,Scalar(0));
drawContours(Img,contours,0,Scalar(255,0,0),-1);
drawContoursの3番目のパラメータが0の場合、最初の輪郭を描画することを示します.最後のパラメータ-1は、描画時に輪郭を塗りつぶし、0より大きい場合は輪郭の厚さを表します.