【练习6.10】笛卡儿坐标转极坐标cvLogPolar的使用及中心点对结果的影响

 

提纲
题目要求
程序代码
结果图片
要言妙道

 

 

 

  

 

题目要求:

 参见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的时候,占用矩形外部的像素

 

posted on 2015-05-03 12:27  毋忆典藏  阅读(648)  评论(0编辑  收藏  举报