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 }
取閾值化後的圖:spa
查找並繪製的效果圖:code