基于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();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。