OpenCV2.4.3のfindContours関数を使用しています。ただし、一部の出力コンターは閉じていません。
cv::cvtColor(m_Image, src, COLOR_BGR2GRAY);
blur(src,srcFiltered, cv::Size(3,3));
cv::Canny(srcFiltered, edge, 20, 10, 3);
vector<vector<cv::Point>> vecContours;
vector<Vec4i> vecHierarchy;
findContours(edge, vecContours, vecHierarchy, CV_RETR_CCOMP ,CV_CHAIN_APPROX_NONE);
typedef cv::Vec<uchar,3> U8C3Elem;
Mat contours = Mat::ones(src.rows, src.cols, CV_8UC1)*255;
for(size_t i=0; i<vecContours.size(); ++i)
{
vector<cv::Point>& vec = vecContours.at(i);
// draw contours
U8C3Elem clr = U8C3Elem(rand()%255, rand()%255, rand()%255);
for(int j=0; j<vec.size(); ++j)
{
m_Image.at<U8C3Elem>(vec.at(j)) = clr;
}
}
私はいくつかの画像処理の本を参照していますが、輪郭は閉曲線として定義されています。下の画像では、異なる色の線は、findContours関数によって検出されたさまざまな輪郭を表しています。それで、誰が考えを持っていますか?ありがとう!
これは輪郭のある画像です http://images.cnitblog.com/blog/374163/201301/18232515-fee482f8a641429f8c8b08081545a2c5.png