题目要求 |
程序代码 |
结果图片 |
要言妙道 |
参见log-polar函数
a、将正方形转换为波浪线的图表
b、如果log-polar的中心点在正方形左上角,画log-polar的结果
c、如果log-polar的中心点在正方形右下角,画log-polar的结果
1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点。 2 // 3 //D:\Work\Work_Programming\Source\Image\lena.jpg 4 5 6 #include "stdafx.h" 7 #include <cv.h> 8 #include <highgui.h> 9 #include <iostream> 10 11 #include <opencv2/legacy/legacy.hpp> 12 //#pragma comment(lib, "opencv_legacy2411.lib") 13 14 using namespace cv; 15 using namespace std; 16 17 //函数声明-->--->-->--->-->--->-->--->// 18 19 20 //<--<--<--<--<--<--<--<--<--函数声明// 21 22 int _tmain(int argc, _TCHAR* argv[]) 23 { 24 CvSize size_Image = cvSize(400, 400); 25 IplImage * image_Resource = cvCreateImage(size_Image, IPL_DEPTH_8U, 1); 26 cvZero(image_Resource); 27 28 IplImage *image_square = cvCloneImage(image_Resource); 29 30 CvPoint point_start = cvPoint(2, 2); 31 CvPoint point_end = cvPoint(397, 397); 32 //CvPoint2D32f point_center = cvPoint2D32f((double)(((point_end.x - point_start.x) / 2) + point_start.x), (double)(((point_end.y - point_start.y) / 2) + point_start.y)); 33 CvPoint2D32f point_center = cvPoint2D32f(image_Resource->width / 2, image_Resource->height / 2); 34 35 cvRectangle(image_square, point_start, point_end, cvScalar(255), 3); 36 37 cvNamedWindow("正方形", CV_WINDOW_AUTOSIZE); 38 cvShowImage("正方形", image_square); 39 40 41 //--------a:-------/: 42 43 IplImage * image_polar = cvCloneImage(image_Resource); 44 cvLogPolar(image_square, image_polar, point_center,20); 45 46 cvNamedWindow("波浪线", CV_WINDOW_AUTOSIZE); 47 cvShowImage("波浪线", image_polar); 48 49 //--------a:-------/。 50 51 //--------b:-------/: 52 53 cvZero(image_polar); 54 point_center = cvPoint2D32f(point_start.x, point_start.y); 55 56 cvLogPolar(image_square, image_polar, point_center, 20); 57 cvNamedWindow("波浪线_b", CV_WINDOW_AUTOSIZE); 58 cvShowImage("波浪线_b", image_polar); 59 60 //--------b:-------/。 61 62 //--------c:-------/: 63 64 cvZero(image_polar); 65 point_center = cvPoint2D32f(point_end.x, point_end.y); 66 67 cvLogPolar(image_square, image_polar, point_center, 20); 68 cvNamedWindow("波浪线_c", CV_WINDOW_AUTOSIZE); 69 cvShowImage("波浪线_c", image_polar); 70 71 //--------c:-------/。 72 73 cvWaitKey(); 74 75 cvReleaseImage(&image_Resource); 76 cvReleaseImage(&image_square); 77 cvReleaseImage(&image_polar); 78 cvDestroyAllWindows(); 79 80 return 0; 81 }
①注意,参数m的值如果是1,观察不到结果,所以要放大
②使用cvRectangle所画的矩形,当thickness等于1的时候,矩形边线占用的像素是自己的,当thickness大于1的时候,占用矩形外部的像素