1. // define head function
  2. #ifndef PS_ALGORITHM_H_INCLUDED
  3. #define PS_ALGORITHM_H_INCLUDED
  4. #include <iostream>
  5. #include <string>
  6. #include "cv.h"
  7. #include "highgui.h"
  8. #include "cxmat.hpp"
  9. #include "cxcore.hpp"
  10. #include "math.h"
  11. using namespace std;
  12. using namespace cv;
  13. void Show_Image(Mat&, const string &);
  14. #endif // PS_ALGORITHM_H_INCLUDED
  15. /*
  16. This program will transform from the
  17. polar to orthogonal coordinate.
  18. */
  19. #include "PS_Algorithm.h"
  20. #include <time.h>
  21. using namespace std;
  22. using namespace cv;
  23. #define pi 3.1415926
  24. int main()
  25. {
  26. string Img_name("4.jpg");
  27. Mat Img;
  28. Img=imread(Img_name);
  29. Show_Image(Img, Img_name);
  30. Mat Img_in(Img.size(), CV_32FC3);
  31. Img.convertTo(Img_in, CV_32FC3);
  32. // Show_Image(Img_in, "in");
  33. Mat Img_out(Img_in.size(), CV_32FC3);
  34. Img_in.convertTo(Img_out, CV_32FC3);
  35. int width=Img_in.cols;
  36. int height=Img_in.rows;
  37. float R;
  38. float e;
  39. float a,b;
  40. e=(float)width/(float)height;
  41. R=(float)height/2.0;
  42. a=(float)width/2.0;
  43. b=R;
  44. Point Center(width/2, height/2);
  45. float R1,R2,new_x, new_y;
  46. float p,q,x1,y1;
  47. float theta;
  48. for (int y=0; y<height; y++)
  49. {
  50. for (int x=0; x<width; x++)
  51. {
  52. R1=y*R/height;
  53. R2=R1*e;
  54. theta=x*2*pi/width;
  55. new_y=Center.y-R1*sin(theta);
  56. new_x=Center.x+R2*cos(theta);
  57. if(new_x<0) new_x=0;
  58. if(new_x>=width-1) new_x=width-2;
  59. if(new_y<0) new_y=0;
  60. if(new_y>=height-1) new_y=height-2;
  61. x1=(int)new_x;
  62. y1=(int)new_y;
  63. p=new_x-x1;
  64. q=new_y-y1;
  65. for (int k=0; k<3; k++)
  66. {
  67. Img_out.at<Vec3f>(y, x)[k]=(1-p)*(1-q)*Img_in.at<Vec3f>(y1, x1)[k]+
  68. (p)*(1-q)*Img_in.at<Vec3f>(y1,x1+1)[k]+
  69. (1-p)*(q)*Img_in.at<Vec3f>(y1+1,x1)[k]+
  70. (p)*(q)*Img_in.at<Vec3f>(y1+1,x1+1)[k];
  71. }
  72. }
  73. }
  74. Img_out=Img_out/255.0;
  75. Show_Image(Img_out, "out");
  76. imwrite("Out.jpg", Img_out*255);
  77. waitKey();
  78. }
  79. // define the show image
  80. #include "PS_Algorithm.h"
  81. #include <iostream>
  82. #include <string>
  83. using namespace std;
  84. using namespace cv;
  85. void Show_Image(Mat& Image, const string& str)
  86. {
  87. namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
  88. imshow(str.c_str(), Image);
  89. }

原图

效果图

OpenCV——PS 滤镜算法之极坐标变换到平面坐标的更多相关文章

  1. OpenCV——PS 滤镜算法之平面坐标到极坐标的变换

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  2. OpenCV——PS滤镜算法之 球面化 (凹陷效果)

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  3. OpenCV——PS滤镜算法之Spherize 球面化(凸出效果)

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  4. OpenCV——PS滤镜算法之 Ellipsoid (凹陷)

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  5. OpenCV——PS滤镜算法之 Ellipsoid (凸出)

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  6. Python: PS 滤镜-- 极坐标变换到平面坐标

    本文用 Python 实现 PS 中的一种滤镜 极坐标变换到平面坐标,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/de ...

  7. OpenCV——PS 滤镜, 浮雕效果

    具体的算法原理可以参考: PS 滤镜, 浮雕效果 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITH ...

  8. OpenCV——PS 滤镜, 曝光过度

    算法原理可以参考: PS 滤镜,曝光过度 #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include <io ...

  9. OpenCV图像变换二 投影变换与极坐标变换实现圆形图像修正

    投影变换 在放射变换中,物体是在二维空间中变换的.如果物体在三维空间中发生了旋转,那么这种变换就成为投影变换,在投影变换中就会出现阴影或者遮挡,我们可以运用二维投影对三维投影变换进行模块化,来处理阴影 ...

随机推荐

  1. 渐变背景(background)效果

    chrom and Safari浏览器: webkit核心的浏览器.使用CSS3渐变方法(css-gradient) -webkit-gradient(type, start_point, end_p ...

  2. C#高级编程 第十五章 反射

    (二)自定义特性 使自定义特性非常强大的因素时使用反射,代码可以读取这些元数据,使用它们在运行期间作出决策. 1.编写自定义特性 定义一个FieldName特性: [AttributeUsage(At ...

  3. NDK以及C语言基础语法(二)

    一.字符串类:(属于类类型) -String (在C++中才有) 使用之前必学引入String 类型: 引入String头文件(系统的头文件): #include <string>   p ...

  4. CAS实现单点登录理解

    CAS 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ),CAS 开始于 2001 年, 并在 2004 年 12 月 ...

  5. 【BZOJ4173】数学 欧拉函数神题

    [BZOJ4173]数学 Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N ...

  6. python中的特殊用法

    1 别名 from xxx import xxx as xxx;

  7. 云服务器 ECS Linux CentOS 修改内核引导顺序

    由于 CentOS 7 使用 grub2 作为引导程序,所以和 CentOS 6 有所不同,并不是修改 /etc/grub.conf 来修改启动项,需要如下操作: 1. 查看系统内部有多少个内核: c ...

  8. 列举Python常用数据类型并尽量多的写出其中的方法

    #1 把字符串的第一个字符大写 string.capitalize() #2 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 string.center(width) #3 返回 ...

  9. django mysql setting 设置

    django mysql setting  django mysql 设置 DATABASES = {    'default': {        'ENGINE': 'django.db.back ...

  10. Java实参和形参与传值和传引用

    实参和形参的定义: 形参出现函数定义中,在整个函数体内都可以使用,离开函数则不能使用. 实参出现在主函数中,进入被调函数后,实参变量也不能使用. 形参和实参的功能是做数据传送.发生函数调用时,主调函数 ...