openCV学习笔记(3):opencv轮廓检测应用例子

一、openCV学习系列笔记请参考:http://blog.csdn.net/chentravelling/article/category/2843741【不断更新】

一、以下链接是轮廓检测中一些函数的原理讲解。

cvFindContours()函数原理

cvDrawContours()函数原理。

二、新建项目

1.配置环境,请参考:http://blog.csdn.net/chentravelling/article/details/42816965

2.将图片放在目录下,请参考:http://blog.csdn.net/chentravelling/article/details/42816965【一定要注意图片地址,否则代码中请使用图片的绝对路径加载图片】

      ps:为了效果直观,图片尽量简单,轮廓清晰较好。

3.代码:

//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
//                                                 //
//     ^^^^^^^轮廓检测cvFindContours()^^^^^^^      //
//                                                 //
//^^^^^^^^^^^^^^^^^^^^By Code陈^^^^^^^^^^^^^^^^^^^^//

#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;

const char *OriginalWindowsName = "Original Image - code 陈/http://bolg.csdn.net/chentravelling";
const char *BinaryWindowsName = "Binary Image - code 陈/http://blog.csdn.net/chentravelling";
const char *ContourWindowsName = "Contour Image - code 陈/http://blog.csdn.net/chentravelling";
const char *TrackbarName = "Threshold";
//指向原图的指针
IplImage *OriginalImage = NULL;
//指向灰度图的指针
IplImage *GrayImage = NULL;
//指向二值化图的指针
IplImage *BinaryImage = NULL;
//指向轮廓图的指针
IplImage *ContourImage = NULL;
//当滑条发生变化时执行的回调函数
CvSeq *PSeq = NULL;
void on_trackbar(int value)
{
	//将灰度图二值化
	BinaryImage = cvCreateImage(cvGetSize(GrayImage),IPL_DEPTH_8U,1);
	cvThreshold(GrayImage,BinaryImage,value,255,CV_THRESH_BINARY);
	//显示二值化图像
	cvShowImage(BinaryWindowsName,BinaryImage);

	CvMemStorage *MStorage = cvCreateMemStorage();
	//轮廓检索
	cvFindContours(BinaryImage,MStorage,&PSeq);

	IplImage *ContourImage = cvCreateImage(cvGetSize(GrayImage),IPL_DEPTH_8U,3);
	int level = 5;
	cvZero(ContourImage);
	cvDrawContours(ContourImage,PSeq,CV_RGB(255,0,0),CV_RGB(0,255,0),level);
	cvShowImage(ContourWindowsName,ContourImage);

	cvReleaseMemStorage(&MStorage);
	cvReleaseImage(&BinaryImage);
	cvReleaseImage(&ContourImage);
}
int main()
{
	//加载原始图片
	OriginalImage = cvLoadImage("1.jpg",1);
	
	//创建原始图像窗口OriginalWindow
	cvNamedWindow(OriginalWindowsName,0);
	//显示原始图片
	cvShowImage(OriginalWindowsName,OriginalImage);

	//将原始图片转成灰度图像
	GrayImage = cvCreateImage(cvGetSize(OriginalImage),IPL_DEPTH_8U,1);
	cvCvtColor(OriginalImage,GrayImage,CV_BGR2GRAY);
	
	//创建二值化图像窗口
	cvNamedWindow(BinaryWindowsName,0);
	//创建轮廓图窗口
	cvNamedWindow(ContourWindowsName,0);

	//创建滑条
	int Threshold = 0;
	cvCreateTrackbar(TrackbarName,BinaryWindowsName,&Threshold,254,on_trackbar);

	on_trackbar(1);

	cvWaitKey();

	cvDestroyWindow(OriginalWindowsName);
	cvDestroyWindow(BinaryWindowsName);
	cvDestroyWindow(ContourWindowsName);
	cvReleaseImage(&OriginalImage);
	cvReleaseImage(&BinaryImage);

	return 0;
}


4.运行结果



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值