基于MFC和OpenCV实现角点检测
本文实例为大家分享了MFC和OpenCV实现角点检测的具体代码,供大家参考,具体内容如下
//角点检测 //根据《基于OpenCV的计算机视觉技术实现》 #definemax_corners200;//限定的最大角点数 IplImage*srcImage=0;//待处理的源图像 IplImage*ImageShow=0;//存储显示带角点的图像 IplImage*grayImage=0;//原始图像转换成的灰阶图像 IplImage*corners1=0;//临时图像 IplImage*corners2=0;//临时图像 intcornerCount0=max_corners; intcornerCount;//实际测得角点数 intqualityLevel=0;//最小质量因子 intminDistance=15;//角点最小距离 CvScalarcolor=CV_RGB(255,0,0);//绘图颜色 CvPoint2D32fcorners[200];//角点坐标 CvRectROI_rect;//测试范围 charchek_area_state=0;//鼠标状态 voidre_find_corners(int)//滑动条响应函数 { inti,x,y,xl,yu,xr,yd,k; intradius=5; intthickness=1; doublequality_level=(double)qualityLevel/100+0.02; doublemin_distance=(double)minDistance; cornerCount=cornerCount0;//设置最大角点数 cvGoodFeaturesToTrack(grayImage,//角点检测 corners1,corners2,corners,&cornerCount, quality_level,min_distance,NULL); if(cornerCount>0){//测到角点 xl=ROI_rect.x;yu=ROI_rect.y;//设置初始测试范围 xr=ROI_rect.x+ROI_rect.width; yd=ROI_rect.y+ROI_rect.height; cvCopy(srcImage,ImageShow);//恢复源图像 for(i=0,k=0;inChannels>1){//原图为真彩色图像==3 srcImage=cvCloneImage(workImg); } else{//原图为灰阶图像 srcImage=cvCreateImage(cvGetSize(workImg),IPL_DEPTH_8U,3); cvCvtColor(workImg,srcImage,CV_GRAY2BGR); } cvFlip(srcImage); grayImage=cvCreateImage(cvGetSize(srcImage),IPL_DEPTH_8U,1); cvCvtColor(srcImage,grayImage,CV_BGR2GRAY);//转换为灰阶图像 ImageShow=cvCloneImage(srcImage); ROI_rect.x=0; ROI_rect.y=0; ROI_rect.width=grayImage->width; ROI_rect.height=grayImage->height; corners1=cvCreateImage(cvGetSize(grayImage),IPL_DEPTH_32F,1); corners2=cvCreateImage(cvGetSize(grayImage),IPL_DEPTH_32F,1); cvNamedWindow("image",0);//设置显示窗口 cvResizeWindow("image",325,350);//改变窗口尺寸 cvCreateTrackbar("角点最小距离","image",//设置距离滑动条 &minDistance,200,re_find_corners); cvCreateTrackbar("最小质量因子","image",//设置质量滑动条 &qualityLevel,100,re_find_corners); re_find_corners(0);//角点检测 cvSetMouseCallback("image",on_mouse2,0);//设置鼠标响应函数 cvWaitKey(0);//等待键输入 cvDestroyWindow("image");//关闭窗口 cvReleaseImage(&srcImage);//释放图像存储单元 cvReleaseImage(&grayImage); cvReleaseImage(&corners1); cvReleaseImage(&corners2); cvFlip(ImageShow); m_dibFlag=imageReplace(ImageShow,&workImg);//输出检测结果 m_ImageType=-2; Invalidate(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。