Opencv学习笔记(四):运用Canny算子边缘检测及Opencv中拖动条事件处理

运用Canny算子边缘检测及Opencv中拖动条事件处理
Last Edit 2013/12/13
1.拖动条的使用
  1)定义一个处理拖动条的函数,比如,在拖动过程中将拖动条的位置显示出来;
        void myTrackHandler(int pos) //函数名可以任取
       { 
         printf("the position of the Track is %d\n",pos);
       }

  2)注册一个拖动条,注册信息中要包括,拖动条的名称,所属的窗口,起始位置,最大值,处理函数。
     int startPos=0;
     int MaxPos=100; //可以自定义,100,200,300....
     cvCreateTrackbar("bar","wnd",&startPos,MaxPos,myTrackHandler);
    
2.Canny边缘检测原理(见原理详解)

3.Canny边缘检测Opencv实现
   Opencv中,利用cvCanny函数来实现的,函数原型如下
void cvCanny(const CvArr* src,CvArr* edge,double threshold1,double threshold2,int size=3)
src:输入图像,其必须是单通道的;
edge:检测出的图像边缘;
threshold1:下阈值,当图像中的灰度值小于阈值时,将其抛弃,在图像中就是用0代替,表示黑色;
threshold2:上阈值,当图像中的灰度值大于阈值时,则认为像素点是边缘;
size:表示的是sobel算子的内核大小,


代码实现:拖动滑条,起点为0,上阈值通过滑条来确定,实现边缘检测
#include "cv.h"
#include "highgui.h"

IplImage *colorImg=NULL;  //载入的图像
IplImage *grayImg=NULL;  //灰度图像
IplImage* edgeImg=NULL; //边缘

void track(int pos)
{
	cvCanny(grayImg,edgeImg,50,pos,3);	
	cvShowImage("canny",edgeImg);
}

int main()
{	
	int startPos=0;
	int maxPos=500;
	cvNamedWindow("canny");
	colorImg=cvLoadImage("D:\\07Personal files\\headpicture.jpg");//载入图片
	grayImg=cvCreateImage(cvGetSize(colorImg),IPL_DEPTH_8U,1);
	edgeImg=cvCreateImage(cvGetSize(colorImg),IPL_DEPTH_8U,1);
	cvCvtColor(colorImg,grayImg,CV_BGR2GRAY);//将图像变为灰度图	
	cvCreateTrackbar("bar","canny",&startPos,maxPos,track); //注册一个滑条	
	cvWaitKey(0);
	cvReleaseImage(&colorImg);
	cvDestroyAllWindows();
	return 0;
}
Opencv学习笔记(四):运用Canny算子边缘检测及Opencv中拖动条事件处理_第1张图片


你可能感兴趣的:(Opencv,数字图像处理)