图像几何变换方法之——remap使用。
源图像
一、图像转置
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat src = imread("lena.jpg",CV_LOAD_IMAGE_UNCHANGED); imshow("src",src); Mat dst; dst.create( src.size(),src.type()); Mat map_x; Mat map_y; map_x.create( src.size(),CV_32FC1); map_y.create( src.size(),CV_32FC1); for( int i = 0; i < src.rows; ++i) { for( int j = 0; j < src.cols; ++j) { map_x.at<float>(i,j) = (float) i;//j;//(src.cols - j) ; map_y.at<float>(i,j) = (float) j;//(src.rows - i) ; } } remap(src,dst,map_x,map_y,CV_INTER_LINEAR); imshow("dst",dst); imwrite("invert3.jpg",dst); waitKey(0); system("pause"); return 0; }结果:
二、图像倒置
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat src = imread("lena.jpg",j) = (float) j;//j;//(src.cols - j) ; map_y.at<float>(i,j) = (float) (src.rows - i) ; } } remap(src,dst); imwrite("invert.jpg",dst); waitKey(0); system("pause"); return 0; }结果:
三、图像水平镜像
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat src = imread("lena.jpg",j) = (float) (src.cols - j) ; map_y.at<float>(i,j) = (float) i;//(src.rows - i) ; } } remap(src,dst); imwrite("invert2.jpg",dst); waitKey(0); system("pause"); return 0; }结果:
四、水平镜像倒置
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat src = imread("lena.jpg",dst); waitKey(0); system("pause"); return 0; }结果: