国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

基于MFC和OpenCV實現(xiàn)角點檢測

2020-01-26 13:30:32
字體:
供稿:網(wǎng)友

本文實例為大家分享了MFC和OpenCV實現(xiàn)角點檢測的具體代碼,供大家參考,具體內(nèi)容如下

// 角點檢測 // 根據(jù)《基于OpenCV的計算機視覺技術(shù)實現(xiàn)》 #define max_corners 200;          // 限定的最大角點數(shù) IplImage* srcImage = 0;          // 待處理的源圖像IplImage* ImageShow = 0;          // 存儲顯示帶角點的圖像IplImage* grayImage = 0;          // 原始圖像轉(zhuǎn)換成的灰階圖像IplImage* corners1 = 0;          // 臨時圖像IplImage* corners2 = 0;          // 臨時圖像 int cornerCount0 = max_corners;int cornerCount;              // 實際測得角點數(shù)int qualityLevel = 0;            // 最小質(zhì)量因子int minDistance = 15;           // 角點最小距離CvScalar color = CV_RGB(255,0,0);      // 繪圖顏色CvPoint2D32f corners[200];         // 角點坐標(biāo)CvRect ROI_rect;              // 測試范圍char  chek_area_state = 0;         // 鼠標(biāo)狀態(tài) void re_find_corners(int)          // 滑動條響應(yīng)函數(shù){ int  i,x,y,xl,yu,xr,yd,k; int  radius = 5; int  thickness = 1; double quality_level = (double) qualityLevel / 100 + 0.02; double min_distance = (double) minDistance;  cornerCount=cornerCount0;        // 設(shè)置最大角點數(shù) cvGoodFeaturesToTrack(grayImage,    // 角點檢測 corners1,corners2,corners,&cornerCount, quality_level,min_distance,NULL);  if (cornerCount>0) {          // 測到角點 xl=ROI_rect.x;   yu=ROI_rect.y;  // 設(shè)置初始測試范圍 xr=ROI_rect.x+ROI_rect.width; yd=ROI_rect.y+ROI_rect.height; cvCopy(srcImage,ImageShow);     // 恢復(fù)源圖像 for (i=0,k=0;i<cornerCount;i++) {  x=(int)corners[i].x;  y=(int)corners[i].y;  if ((xl<x)&&(x<xr)&&(yu<y)&&(y<yd)) { // 范圍檢查  corners[k].x=corners[i].x; // 保存范圍內(nèi)角點  corners[k].y=corners[i].y;  k++;  } } cornerCount=k;           // 范圍內(nèi)角點數(shù) cvCopy(srcImage,ImageShow); for (i=0;i<cornerCount;i++) {  x=(int)corners[i].x;  y=(int)corners[i].y;  cvCircle(ImageShow,cvPoint(x,y),  // 角點處畫圈  radius,color,thickness,CV_AA,0); } cvRectangle(ImageShow,cvPoint(xl,yu),cvPoint(xr,yd),  CV_RGB(0,255,0),thickness,CV_AA,0); // 畫矩形 cvShowImage("image", ImageShow);  // 顯示畫圈圖像 }} void on_mouse2(int event,int x,int y,int flags,void* param){                      // 鼠標(biāo)響應(yīng)函數(shù) int thickness = 1; CvPoint point1,point2;  if (event == CV_EVENT_LBUTTONDOWN) {  // 鼠標(biāo)左鍵按下 ROI_rect.x = x;           // 記錄檢測窗口一角坐標(biāo) ROI_rect.y = y; chek_area_state = 1;        // 設(shè)置狀態(tài)標(biāo)志 } else if (chek_area_state && event == CV_EVENT_MOUSEMOVE) { // 鼠標(biāo)移動 cvCopy(srcImage,ImageShow);     // 恢復(fù)原始圖像 point1 = cvPoint(ROI_rect.x, ROI_rect.y); point2 = cvPoint(x,y);       // 當(dāng)前坐標(biāo) cvRectangle(ImageShow,point1,point2,CV_RGB(0,255,0),  thickness,CV_AA,0);     // 畫矩形 cvShowImage("image", ImageShow);  // 顯示檢測結(jié)果 cvWaitKey(20);           // 延時 } else if (chek_area_state && event == CV_EVENT_LBUTTONUP) { // 鼠標(biāo)左鍵抬起 ROI_rect.width = abs(x - ROI_rect.x); // 記錄檢測窗口對角坐標(biāo) ROI_rect.height = abs(y - ROI_rect.y);  re_find_corners(0);         // 角點檢測 chek_area_state = 0;        // 恢復(fù)狀態(tài)標(biāo)志 cvWaitKey(20);  }} void CCVMFCView::OnCornersTest()      // 角點檢測{ if (workImg->nChannels>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); // 轉(zhuǎn)換為灰階圖像 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);        // 設(shè)置顯示窗口 cvResizeWindow("image",325,350);    // 改變窗口尺寸  cvCreateTrackbar("角點最小距離", "image", // 設(shè)置距離滑動條 &minDistance, 200,re_find_corners); cvCreateTrackbar("最小質(zhì)量因子","image", // 設(shè)置質(zhì)量滑動條 &qualityLevel,100,re_find_corners);  re_find_corners(0);           // 角點檢測  cvSetMouseCallback("image",on_mouse2,0); // 設(shè)置鼠標(biāo)響應(yīng)函數(shù)  cvWaitKey(0);              // 等待鍵輸入  cvDestroyWindow( "image" );       // 關(guān)閉窗口  cvReleaseImage(&srcImage);       // 釋放圖像存儲單元 cvReleaseImage(&grayImage); cvReleaseImage(&corners1); cvReleaseImage(&corners2);  cvFlip(ImageShow); m_dibFlag=imageReplace(ImageShow,&workImg); // 輸出檢測結(jié)果  m_ImageType=-2; Invalidate();}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 皋兰县| 静乐县| 资溪县| 平湖市| 栖霞市| 汶上县| 建瓯市| 东宁县| 吉木萨尔县| 昂仁县| 西峡县| 河津市| 梅州市| 图木舒克市| 峡江县| 曲水县| 乌鲁木齐县| 宜宾县| 靖远县| 贡觉县| 昭平县| 云安县| 大田县| 永嘉县| 绥芬河市| 长宁区| 西和县| 竹溪县| 玛沁县| 南充市| 工布江达县| 大理市| 南京市| 长泰县| 寿宁县| 衡水市| 健康| 邮箱| 天全县| 福鼎市| 梁河县|