// 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.1415926 float 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

最新文章

  1. Andrion错误解决:cannot be resolved or is not a field
  2. winform自定义日期控件,要求可以手动输入日期DatePicker
  3. What is research (1)
  4. php Windows系统 wamp集成环境下redis的使用
  5. mshadow笔记
  6. GPU 优化总结
  7. 图像金字塔及其在 OpenCV 中的应用范例(上)
  8. php laravel 安装
  9. 【机试题】c# 是否是素数,找出比它大的第一个素数
  10. 阿里云 RDS 怎么保证高可用性
  11. 使用zeranoe的自动化脚本mingw-w64-build-3.6.4在ubutun14.04_64bit上交叉编译ffmpeg 2.5
  12. UNIX文化与历史--初学者必看
  13. Linux系统用户管理
  14. insert时报Cannot add or update a child row: a foreign key constraint fails (`yanchangzichan`.`productstatusrecord`, CONSTRAINT `p_cu` FOREIGN KEY (`cid`) REFERENCES `customer` (`cid`))错误
  15. MariaDB存储引擎
  16. .NET(WinCE、WM)转Android开发——Xamarin和Smobiler对比
  17. qt: 系统默认程序打开文件或者软件;
  18. P3784 [SDOI2017]遗忘的集合
  19. Word打开时显示*模板*,删除模板
  20. Spring Security教程(一):初识Spring Security

热门文章

  1. 【bootstrap】bootstrap中的tooltip的使用
  2. 现代数字信号处理——AR模型
  3. ARC forbids Objective-C objects in structs or unions
  4. django 实现下载功能
  5. Hibernate Restrictions QBC运算符
  6. 音频单元组件服务参考(Audio Unit Component Services Reference)
  7. 移植alsa-lib遇到的问题
  8. 【Android Studio探索之路系列】之十:Gradle项目构建系统(四):Android Studio项目多渠道打包
  9. ubuntu 下的中文输入法的安装和配置- ibus
  10. js event 的target 和currentTarget