findContour和drawContour的使用

不同的使用方法主要是因为第四第五个参数的不同

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

int main()
{
	VideoCapture capture(1); //capture the video from web cam

	if (!capture.isOpened())  // if not success, exit program
	{
		cout << "Cannot open the web cam" << endl;
		return -1;
	}
	namedWindow("camera");
	//capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度
	//capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度
	//capture.set(CV_CAP_PROP_FPS, 30);//帧数
	//capture.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度 1
	//capture.set(CV_CAP_PROP_CONTRAST,40);//对比度 40
	//capture.set(CV_CAP_PROP_SATURATION, 50);//饱和度 50
	//capture.set(CV_CAP_PROP_HUE, 50);//色调 50
	//capture.set(CV_CAP_PROP_EXPOSURE, 0);//曝光 50
	
	while (1)
	{
		Mat camera;
		capture >> camera;


		Mat biggest_threshold;
		threshold(camera, biggest_threshold, 122, 255, THRESH_BINARY);

		//Vec4i是Vec<int,4>的别名,定义了一个“向量内每一个元素包含了4个int型变量”的向量。
		//向量hiararchy内的元素和轮廓向量contours内的元素是一一对应的,向量的容量相同。
		vector<Vec4i> hierarchy;
		vector<vector<Point>> contour;
		
		//第四个参数是轮廓的检索模式,CV_RETR_EXTERNAL(只检测最外围轮廓)、
		//CV_RETR_LIST   检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系、
		//CV_RETR_CCOMP  检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层、
		//CV_RETR_TREE, 检测所有轮廓,所有轮廓建立一个等级树结构

		//第五个参数是定义轮廓的近似方法,CV_CHAIN_APPROX_NONE 保存物体边界上所有连续的轮廓点到contours向量内、
		//CV_CHAIN_APPROX_SIMPLE 仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours向量内、
		//CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法

		//第六个参数是Point偏移量,所有的轮廓信息相对于原始图像对应点的偏移量,相当于在每一个检测出的轮廓点上加上该偏移量,并且Point还可以是负值
		findContours(biggest_threshold, hierarchy, contour, RETR_TREE, CHAIN_APPROX_SIMPLE);
		
		drawContours(biggest_threshold, contour, -1, Scalar(0, 0, 0), 2, 8, hierarchy);


		imshow("camera", biggest_threshold);
		waitKey(1);
	}

	return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值