zoukankan      html  css  js  c++  java
  • 【练习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的时候,占用矩形外部的像素

  • 相关阅读:
    Redis-Sentinel 哨兵
    virtualenv and virtualenvwrapper
    C/C++中extern关键字详解
    C++ 中文拼音排序方法。
    vector排序
    VS2013 Ctrl+Shift+F 没反应
    PostMessage 解析
    CTextUI 文本控件 显示数字方法
    SetTimer API函数
    CEditUI 控件使用
  • 原文地址:https://www.cnblogs.com/tingshuixuan2012/p/4473538.html
Copyright © 2011-2022 走看看