Opencv— — kaleidoscope Filter
来源:互联网 发布:怎么优化宝贝标题贴吧 编辑:程序博客网 时间:2024/06/03 05:52
// define head function#ifndef PS_ALGORITHM_H_INCLUDED#define PS_ALGORITHM_H_INCLUDED#include <iostream>#include <string>#include "cv.h"#include "highgui.h"#include "cxmat.hpp"#include "cxcore.hpp"#include "math.h"using namespace std;using namespace cv;void Show_Image(Mat&, const string &);#endif // PS_ALGORITHM_H_INCLUDED/*generate the circle transform*/#include "PS_Algorithm.h"#include <time.h>using namespace std;using namespace cv;#define pi 3.1415926float Triangle(float x);int main(){ string Img_name("4.jpg"); Mat Img; Img=imread(Img_name); Mat Img_out(Img.size(), CV_8UC3); int width=Img.cols; int height=Img.rows; float angle = pi/4; float angle2=pi/4; float centreX = 0.5; float centreY = 0.5; float sides = 10; float icentreX=width*centreX; float icentreY=height*centreY; float radius=150; float dx,dy,new_x,new_y; float p,q,x1,y1; float c, r, theta, temp_theta, radius_c; for (int y=0; y<height; y++) { for (int x=0; x<width; x++) { dx=x-icentreX; dy=y-icentreY; theta=atan2(dy, dx)-angle-angle2; r=sqrt(dy*dy+dx*dx); temp_theta=theta/pi*sides*0.5; theta=Triangle(temp_theta); if (radius) { c=cos(theta); radius_c=radius/c; r=radius_c * Triangle(r/radius_c); } theta=theta+angle; new_x=r * cos(theta)+icentreX; new_y=r * sin(theta)+icentreY; if(new_x<0) new_x=0; if(new_x>=width-1) new_x=width-2; if(new_y<0) new_y=0; if(new_y>=height-1) new_y=height-2; // if (new_x<0) continue; // if (new_x>=width-1) continue; // if (new_y>=height-1) continue; // if (new_y<0) continue; x1=(int)new_x; y1=(int)new_y; p=new_x-x1; q=new_y-y1; for (int k=0; k<3; k++) { Img_out.at<Vec3b>(y, x)[k]=(1-p)*(1-q)*Img.at<Vec3b>(y1, x1)[k]+ (p)*(1-q)*Img.at<Vec3b>(y1,x1+1)[k]+ (1-p)*(q)*Img.at<Vec3b>(y1+1,x1)[k]+ (p)*(q)*Img.at<Vec3b>(y1+1,x1+1)[k]; } } } Show_Image(Img_out, "out"); cout<<"All is well"<<endl; // imwrite("Out.jpg", Img_out); waitKey();}float Triangle(float x){ float temp_r=fmod(x, 1.0); if (temp_r<0.5) { return 2*temp_r; } else { return 2*(1-temp_r); }}// define the show image#include "PS_Algorithm.h"#include <iostream>#include <string>using namespace std;using namespace cv;void Show_Image(Mat& Image, const string& str){ namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE); imshow(str.c_str(), Image);}
图像效果可以参考:
http://blog.csdn.net/matrix_space/article/details/46789783
0 0
- Opencv— — kaleidoscope Filter
- Opencv— — Twirl Filter
- Opencv— — Pinch Filter
- Opencv— — Circle Filter
- Shader特效——“Kuwahara Filter”的实现 【OpenCV】【GLSL】
- 【拜小白opencv】33-平滑处理6——引导滤波/导向滤波(Guided Filter)
- opencv image filter
- bilateral filter using opencv
- opencv kalman filter
- MOQL—过滤器(Filter)
- servlet过滤器—filter
- Filter(1)—基础知识
- FIlter(2)—案例
- 用 OpenCV 实现 Guided Filter
- Python-openCV, Kalman filter实战
- Kaleidoscope配合SourceTree的使用
- opencv bilateral filter vs matlab bilateral filter 双边滤波
- AngularJs基础——过滤器filter及自定义过滤器filter
- zoj1405
- HDU 2138 How many prime numbers
- zoj1414
- OC_NSString
- MATLAB图像函数 块和邻域的处理
- Opencv— — kaleidoscope Filter
- zoj1494
- 重载一元、二元运算符
- 初学php做的有关php有关知识的了解
- 英语学习--chap15 对等连接词与对等从句
- 【HTML学习】第四章 更丰富的内容标记方法
- zoj1514
- nyoj106背包问题
- Introduction to probability