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. #include "PS_Algorithm.h"
  16. #include <time.h>
  17. using namespace std;
  18. using namespace cv;
  19. #define pi 3.1415926
  20. int main()
  21. {
  22. string Img_name("4.jpg");
  23. Mat Img;
  24. Img=imread(Img_name);
  25. Mat Img_out(Img.size(), CV_8UC3);
  26. Img.copyTo(Img_out);
  27. int width=Img.cols;
  28. int height=Img.rows;
  29. int N=70;
  30. Point Center(width/2, height/2);
  31. float radius,Dis,new_x,new_y;
  32. float p,q,x1,y1,x0,y0;
  33. float theta;
  34. for (int y=0; y<height; y++)
  35. {
  36. for (int x=0; x<width; x++)
  37. {
  38. y0=Center.y-y;
  39. x0=x-Center.x;
  40. Dis=x0*x0+y0*y0;
  41. theta=atan(y0/(x0+0.00001));
  42. if(x0<0) theta=theta+pi;
  43. radius=sqrt(Dis);
  44. theta=theta+radius/N;
  45. new_x=radius*cos(theta);
  46. new_y=radius*sin(theta);
  47. new_x=Center.x+new_x;
  48. new_y=Center.y-new_y;
  49. if(new_x<0) new_x=0;
  50. if(new_x>=width-1) new_x=width-2;
  51. if(new_y<0) new_y=0;
  52. if(new_y>=height-1) new_y=height-2;
  53. x1=(int)new_x;
  54. y1=(int)new_y;
  55. p=new_x-x1;
  56. q=new_y-y1;
  57. for (int k=0; k<3; k++)
  58. {
  59. Img_out.at<Vec3b>(y, x)[k]=(1-p)*(1-q)*Img.at<Vec3b>(y1, x1)[k]+
  60. (p)*(1-q)*Img.at<Vec3b>(y1,x1+1)[k]+
  61. (1-p)*(q)*Img.at<Vec3b>(y1+1,x1)[k]+
  62. (p)*(q)*Img.at<Vec3b>(y1+1,x1+1)[k];
  63. }
  64. }
  65. }
  66. Img_out=Img_out;
  67. Show_Image(Img_out, "out");
  68. imwrite("Out.jpg", Img_out);
  69. waitKey();
  70. }
  71. // define the show image
  72. #include "PS_Algorithm.h"
  73. #include <iostream>
  74. #include <string>
  75. using namespace std;
  76. using namespace cv;
  77. void Show_Image(Mat& Image, const string& str)
  78. {
  79. namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
  80. imshow(str.c_str(), Image);
  81. }

原图

效果图

OpenCV——PS滤镜 漩涡 vertex的更多相关文章

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

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

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

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

  3. PS 滤镜——漩涡 vortex

    %%% Vortex %%% 漩涡效果 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS A ...

  4. OpenCV——PS滤镜,渐变映射

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

  5. OpenCV——PS滤镜,毛玻璃特效

    程序完成 "毛玻璃" 特效, 不过边缘没有处理,使得最终的图像有黑边. 不过,有了黑边,感觉效果也不错,所以这个bug 没有管. #ifndef PS_ALGORITHM_H_IN ...

  6. OpenCV——PS滤镜, 碎片特效

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

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

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

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

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

  9. OpenCV——PS滤镜之 波浪效果 wave

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

随机推荐

  1. 命令行编译sass

    一.安装ruby1.需要的软件设备: 2.安装过程:点击上图“应用程序”安装即可,注意安装过程中其中三项都需要打上勾.如若没有三项都打上勾则需要修改环境变量中的path路径后添加一个分号. 3.打开c ...

  2. Spark源码分析之七:Task运行(一)

    在Task调度相关的两篇文章<Spark源码分析之五:Task调度(一)>与<Spark源码分析之六:Task调度(二)>中,我们大致了解了Task调度相关的主要逻辑,并且在T ...

  3. php正则表达式匹配img中任意属性的方法

    经常和图片打交道,不得不用到一些提取图片中scr.alt.title.等的属性,这里总结给大家一些常用的,感觉还不错,比较通用! PHP正则表达式匹配img中任意属性PHP 复制代码代码如下: < ...

  4. C#与Java在修饰符上的不同

    1.readonly 修饰符仅用于修饰类的数据成员.正如其名字说的,一旦它们已经进行了写操作.直接初始化或在构造函数中对其进行了赋值,数据成员就只能对其进行读取. readonly 和 const 数 ...

  5. 【iOS开发-51】案例学习:动画新写法、删除子视图、视图顺序、延迟方法、button多功能使用方法及icon图标和启动页设置

    案例效果: (1)导入所需的素材,然后用storyboard把上半截位置和大小相对固定的东西布局起来.当然,这些控件也要定义成对应地IBOutlet和IBAction方便兴许使用它们. 注意:本案例在 ...

  6. EntityFramework走马观花之CRUD(下)

    我在Entity Framework系列文章的CRUD上篇中介绍了EF的数据查询,中篇谈到了EF的数据更新,下篇则聊聊EF实现CRUD的内部原理. 跟踪实体对象状态 在CRUD上篇和中篇谈到,为了实现 ...

  7. WCP人员管理之添加人员

    1.用户管理页面 其中 : var url_formActionUser = "user/form.do";//增加.修改.查看URL 2. 通过 /form 路由, 转到 Use ...

  8. Vue 父子通话

    dom: <app-entry ref="child" :id='entryFaid'  v-on:refreshbizlines="EntryUpdateData ...

  9. php xmlrpc使用示例

    xmlrpc 远程过程调用, 使用xml文本方式传输数据. soap协议比xmlrpc复杂并强大. 1.修改 php.ini,开启 xmlrpc 扩展 2.rpc_client.php <?ph ...

  10. Javascript模块化编程-require.js[3]

    很多情况下,JS都是放到一个或者多个文件里,只要加载这些文件就可以了. 但是对于一些小型项目而言,这种写法是没有任何问题的. 但是对于某些大型网站,JS的量是很大的,如果还采用这种方式,网站时常在加载 ...