【OpenCV】轮廓提取——findContours()

       轮廓是图像的重要特征之一,有些时候,很容易将其和边缘混淆。因此查阅了关于轮廓和边缘的词条,以此加深对轮廓和边缘这两个概念的认识和理解。边缘是图像差异变化比较显著的地方,而轮廓则是构成图形和物体的边缘线条,属于边缘的一部分。对于形状单一的二值图像而言,物体轮廓和边缘是重合的。在OpenCV中,我们可以通过findContours函数提取图像的轮廓信息。

#include
#include
#include
#include

using namespace cv;
using namespace std;


int main(int argv, char** argc)
{
	Mat src;
	src = imread("D://opencv//5.PNG");
	if (!src.data)
	{
		cout << "Could not loaded image..." << endl;
		return -1;
	}

	// convert binary image
	Mat grayImg, binImg;
	cvtColor(src, grayImg, COLOR_BGR2GRAY);
	threshold(grayImg, binImg, 100, 255, THRESH_BINARY | THRESH_OTSU);        //图像二值化

	// find contours
	vector> contours;
	vector hierarchy;
	findContours(binImg, contours, hierarchy, RETR_LIST, CHAIN_APPROX_SIMPLE); //提取轮廓

	// draw find result                                                 
	for (size_t i = 0; i < contours.size(); i++)
	{
        //绘制第i条轮廓
		drawContours(src, contours, (int)i, Scalar(0, 0, 255), 1, 8, hierarchy, 0);       
	}

	// show find result
	namedWindow("Find Result", WINDOW_AUTOSIZE);
	imshow("Find Result", src);
	waitKey(0);
	return 0;
}

结果如下:

【OpenCV】轮廓提取——findContours()_第1张图片

 

【OpenCV】轮廓提取——findContours()_第2张图片

 

你可能感兴趣的:(opencv,opencv,边缘检测)