我正在使用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