图像几何变换方法之——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",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) j;//j;//(src.cols - j) ; map_y.at<float>(i, j) = (float) (src.rows - i) ; } } remap(src, dst, map_x, map_y, CV_INTER_LINEAR); imshow("dst", 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",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) (src.cols - j) ; map_y.at<float>(i, j) = (float) i;//(src.rows - i) ; } } remap(src, dst, map_x, map_y, CV_INTER_LINEAR); imshow("dst", 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",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) (src.cols - j) ; map_y.at<float>(i, j) = (float) (src.rows - i) ; } } remap(src, dst, map_x, map_y, CV_INTER_LINEAR); imshow("dst", dst); imwrite("invert2.jpg", dst); waitKey(0); system("pause"); return 0; }结果: