openCV轮廓

# include <cv.h>
# include <highgui.h>

IplImage *g_image = NULL;
IplImage *g_gray = NULL;
int g_thresh = 100;
CvMemStorage *g_storage = NULL;
void on_trackbar(int) {
	if (g_storage == NULL) {
		g_gray = cvCreateImage(cvGetSize(g_image), 8, 1);
		g_storage = cvCreateMemStorage(0);
	} else
	{
		cvClearMemStorage(g_storage);
	}
	CvSeq * contours = 0;
	cvCvtColor(g_image, g_gray, CV_BGR2GRAY);
	cvThreshold(g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY);//使用g_thresh中所保存的值二值化该图像。为找到轮廓做准备。
	cvFindContours(g_gray, g_storage, &contours);
	cvZero(g_gray);

	if (contours) {
		cvDrawContours(
			g_gray,
			contours,
			cvScalarAll(255),//外部轮廓的颜色
			cvScalarAll(255),//洞的颜色
			100//遍历轮廓的最大深度。
			);
		
	}
	cvShowImage("Contours", g_gray);
}

int main(int argc, char **argv){
	if (argc!=2 || !(g_image = cvLoadImage(argv[1])))
		return -1;
	cvNamedWindow("Contours", 1);
	cvCreateTrackbar(
		"Threshold",
		"Contours",
		&g_thresh,
		255,
		on_trackbar
		);
	on_trackbar(0);
	cvWaitKey();
	return 0;
}
/*
2015年12月28日16:28:17
折腾了一个下午总算是把openCV的配置弄完了。之前也并没有注意cvLoadImage函数在处理图像的时候,在命令行写的是“文件名.jpg”,因为这个白白浪费了这么长的时间。要疯了。
滚动条也运行了出来。简单看了一下这个程序。cvCreateTrackbar函数创建了滚动条,然后把滚动条命名成了"Threshold"。整个结构在cvNamedWindow创建的窗体Contours中。默认的阈值取得是
g_thresh变量中所保存的值。初始100.
cvCreateTrackbar创建了该结构并给出了初始的阈值。也即滚动条所停留在的值。和最大的阈值255.
在on_trackbar(0);则调用了滚动条的函数。即你修改滚动条的值,则进入该函数

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值