【练习8.7】cvGoodFeaturesToTrack确定图像强角点、cvFindCornerSubPix亚像素级角点检测
2015-05-20 21:18
621 查看
题目要求 | 程序代码 | 结果图片 | 要言妙道 | 借鉴参考 |
黑色背景上创建一个白色拐角,使得这个角正好在整数值的坐标上,保存用OpenCV打开
a、找出并输出拐角的确切坐标
分别改变原始图像进行如下操作
b、用白边透明填充的圆将圆角遮住
c、用白边黑色填充的圆将圆角遮住
d、用黑色圆块将圆角遮住
程序代码:
// OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。 // // string file_full_name = "D:\\Work\\Work_Programming\\Source\\Image\\OpenCVExerciseImage\\第8章\\r20.jpg"; #include "stdafx.h" #include<string> #include <cv.h> #include <highgui.h> #include <iostream> #include<math.h> #include <opencv2/legacy/legacy.hpp> //#pragma comment(lib, "opencv_legacy2411.lib") using namespace cv; using namespace std; //函数声明-->--->-->--->-->--->-->--->// //<--<--<--<--<--<--<--<--<--函数声明// int _tmain(int argc, _TCHAR* argv[]) { string file_full_name = "D:\\Work\\Work_Programming\\Source\\Image\\OpenCVExerciseImage\\第8章\\拐角.jpg"; IplImage * image_source = cvLoadImage(file_full_name.c_str(), CV_LOAD_IMAGE_GRAYSCALE); CV_Assert(image_source); string file_full_name_2 = "D:\\Work\\Work_Programming\\Source\\Image\\OpenCVExerciseImage\\第8章\\拐角2.jpg"; IplImage * image_source_2 = cvLoadImage(file_full_name_2.c_str(), CV_LOAD_IMAGE_GRAYSCALE); CV_Assert(image_source_2); IplImage * images[2] = { image_source, image_source_2 }; string window_name = "角度图像"; for (int i = 0; i < 2; ++i) { window_name = window_name + "。"; IplImage * image_gray = cvCloneImage(images[i]); IplImage * image_eig = cvCreateImage(cvGetSize(images[i]), IPL_DEPTH_32F, 1); cvZero(image_eig); IplImage* image_temp = cvCloneImage(image_eig); int corner_count = 5; CvPoint2D32f *corners = new CvPoint2D32f[corner_count]; cvGoodFeaturesToTrack(image_gray, image_eig, image_temp, corners, &corner_count, 0.1, 10); IplImage * image_corner = cvCloneImage(image_gray); //cvZero(image_corner); cout << "cvGoodFeaturesToTrack:" << endl; for (int i = 0; i < corner_count; ++i) { cout << corners[i].x << " " << corners[i].y << endl; cvDrawCircle(image_corner, cvPoint(corners[i].x, corners[i].y), 5, cvScalar(255)); } cvNamedWindow(window_name.c_str(), CV_WINDOW_AUTOSIZE); cvShowImage(window_name.c_str(), image_corner); int half_win_size = 3;//the window size will be 3+1+3=7 int iteration = 20; double epislon = 0.1; cvFindCornerSubPix(image_gray, corners, corner_count , cvSize(half_win_size, half_win_size), cvSize(-1, -1) , cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, iteration, epislon)); IplImage * image_subPix = cvCloneImage(image_gray); cout << "cvFindCornerSubPix:" << endl; for (int i = 0; i < corner_count; ++i) { cout << corners[i].x << " " << corners[i].y << endl; cvDrawCircle(image_subPix, cvPoint(corners[i].x, corners[i].y), 5, cvScalar(255)); } window_name = window_name + "。"; cvShowImage(window_name.c_str(), image_subPix); cvReleaseImage(&image_gray); cvReleaseImage(&image_eig); cvReleaseImage(&image_temp); cvReleaseImage(&image_corner); cvReleaseImage(&image_subPix); } cvWaitKey(0); cvReleaseImage(&image_source); cvReleaseImage(&image_source_2); cvDestroyAllWindows(); return 0; }
结果图片:
借鉴参考:
相关文章推荐
- 【OpenCV3】角点检测——cv::goodFeaturesToTrack()与cv::cornerSubPix()详解
- Corner Detection Using cvGoodFeaturesToTrack
- Leaning OpenCV:Corner Detection Using cvGoodFeaturesToTrack
- Leaning OpenCV:Corner Detection Using cvGoodFeaturesToTrack
- cvGoodFeaturesToTrack()设置ROI的问题
- 角点检测cvFindCornerSubPix和cvGoodFeaturesToTrack
- cvGoodFeaturesToTrack和(CV::Mat 下的goodFeaturesToTrack)
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack(七)
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack
- OpenCV_Corner Detect with Harris and goodFeaturesToTrack( 基于Harris及适合跟踪的优质特征的角点检测)
- 第十章 跟踪与运动 opecv cvGoodFeaturesToTrack
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack(七)
- [learning opencv]第十章cvGoodFeaturesToTrack的demo
- cvGoodFeaturesToTrack()与goodFeaturesToTrack()进行harris角点检测
- opencv例程之cvGoodFeaturesToTrack
- OpenCv目标跟踪_cvGoodFeaturesToTrack()寻找角点
- opencv3_java 图像的角点检测DetectConers goodFeaturesToTrack
- cvGoodFeaturesToTrack
- python里使用cv2.goodFeaturesToTrack()函数追踪图像里的关键点
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack(七)