Contoursプロファイル

1277 ワード

1輪郭を探すfindContours
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より大きい場合は輪郭の厚さを表します.