【OpenCV學習筆記】二十四、輪廓查找與繪製(一)

輪廓查找與繪製(一)

1.查找輪廓——findContours()

2.繪製輪廓——drawContours()

先上ppt:












代碼:查找輪廓並繪製輪廓

///查找輪廓並繪製輪廓
#include "opencv2/opencv.hpp"
using namespace cv;
#include <iostream>
using namespace std;
int main()
{
	//1.查找輪廓時,一般使用二值化圖像,進行閾值化處理或者Canny邊緣檢測
	Mat srcImg = imread("11.png",CV_LOAD_IMAGE_COLOR);
	imshow("srcImg",srcImg);
	Mat copyImg = srcImg.clone();//將原圖像備份(查找輪廓會改變原圖像)
	cvtColor(srcImg,srcImg,CV_BGR2GRAY);//轉換成灰度圖(閾值化需要圖像會灰度圖)
	threshold(srcImg, srcImg, 100, 255, CV_THRESH_BINARY_INV); //閾值化並保證黑色背景白色輪廓
	imshow("threshold",srcImg);
	//2.查找輪廓並繪製輪廓
	vector<vector<Point>> contours;//存放檢測到的輪廓,每個輪廓均由點組成
	vector<Vec4i> hierarchy;//還未理解,沒用到.
	//2.1查找輪廓——findContours()
	//輪廓檢索模式:CV_RETR_EXTERNAL爲檢測最外層
	//輪廓近似方法:CV_CHAIN_APPROX_NONE爲連續存儲所有的輪廓點
	//findContours(srcImg,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
	//輪廓檢索模式:CV_RETR_TREE及其他均爲檢測所有輪廓
	//輪廓近似方法:CV_CHAIN_APPROX_SIMPLE爲對於壓縮存儲,對於水平、垂直或斜向的線段,只會存儲端點
	findContours(srcImg, contours, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
	//2.2繪製輪廓——drawContours()
	//contourIdx:繪製輪廓索引,-1爲繪製所有輪廓
    //*線寬若爲負數則向內填充輪廓,可實現簡單的孔洞填充和標記聯通域
    drawContours(copyImg,contours,-1,Scalar(0,255,0),2,8);//contourIdx:繪製輪廓索引,-1爲繪製所有輪廓
	imshow("draw contours",copyImg);
	waitKey(0);
	return 0;
}

運行結果:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章