// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include#include #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 #include "PS_Algorithm.h" #include using namespace std; using namespace cv; #define pi 3.1415926 int main() { string Img_name("4.jpg"); Mat Img; Img=imread(Img_name); float theta=pi/6; int width=Img.cols; int height=Img.rows; /* // horizontal skewing int new_height=height; int new_width=width+height*tan(theta)+1; Mat Img_H=Mat::zeros(new_height,new_width, CV_8UC3); float Dis; float new_x, new_y; float x1, y1, p; for (int y=0; y width-1) new_x=width-2; if (new_x>0 && new_x (y,x)[0]=(1-p)*Img.at (y1,x1)[0]+p*Img.at (y1,x1+1)[0]; Img_H.at (y,x)[1]=(1-p)*Img.at (y1,x1)[1]+p*Img.at (y1,x1+1)[1]; Img_H.at (y,x)[2]=(1-p)*Img.at (y1,x1)[2]+p*Img.at (y1,x1+1)[2]; } } } Show_Image(Img_H, "out"); imwrite("H.jpg", Img_H); */ // vertical skewing int new_height=height+width*tan(theta)+1; int new_width=width; Mat Img_V=Mat::zeros(new_height,new_width, CV_8UC3); float Dis; float new_x, new_y; float x1, y1, p; for (int y=0; y 0 && new_y (y,x)[0]=(1-p)*Img.at (y1,x1)[0]+p*Img.at (y1+1,x1)[0]; Img_V.at (y,x)[1]=(1-p)*Img.at (y1,x1)[1]+p*Img.at (y1+1,x1)[1]; Img_V.at (y,x)[2]=(1-p)*Img.at (y1,x1)[2]+p*Img.at (y1+1,x1)[2]; } } } Show_Image(Img_V, "out"); imwrite("V.jpg", Img_V); waitKey(); } // define the show image #include "PS_Algorithm.h" #include #include 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); }
原圖
效果圖