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

来源:互联网 发布:gta5捏脸数据日本妹子 编辑:程序博客网 时间:2024/04/30 07:41
运用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;}



0 0
原创粉丝点击