findContours():
第二个参数为一个检测到的轮廓,函数调用后的运算结果都放在这里,每个轮廓存储为1个点向量,用point类型的vector表示。
第三个参数表示轮廓数量,包含了许多元素。每个轮廓对应4个hierarchy元素hierarchy[i][0]——hierarchy[i][3],分别表示后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓的索引编号.
drawContours()函数:
第二个参数:所有的输入轮廓,用point类型的vector表示。
第三个参数:轮廓绘制的指示变量
第四个参数:轮廓的颜色
第五个参数:轮廓线条的粗细度。如为FILLED,便会绘制在轮廓内部。
第六个参数:线条的类型。
第七个参数:可选的层次结构信息。
1 #include<opencv2/opencv.hpp> 2 using namespace std; 3 using namespace cv; 4 5 int main() 6 { 7 Mat src = imread("D:/meinv.jpg",0); 8 imshow("原图", src); 9 10 Mat dstImage = Mat::zeros(src.rows, src.cols, CV_8UC3); 11 12 src = src > 119; 13 imshow("取阈值化后的原始图", src); 14 15 vector<vector<Point>>contours; 16 vector<Vec4i>hierarchy; 17 18 findContours(src, contours, hierarchy, CV_RETR_CCOMP, CHAIN_APPROX_SIMPLE); 19 20 int index = 0; 21 for (; index >= 0; index = hierarchy[index][0]) 22 { 23 Scalar color(rand() & 255, rand() & 255, rand() & 255); 24 drawContours(dstImage, contours, index, color, FILLED, 8, hierarchy); 25 } 26 imshow("轮廓图", dstImage); 27 waitKey(0); 28 return 0; 29 30 }
取阈值化后的图:
查找并绘制的效果图: