OpenCV图像几何变换——转置,镜像,倒置
图像几何变换方法之——remap使用
源图像
一、图像转置
1 #include <iostream> 2 #include <opencv2/opencv.hpp> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 Mat src = imread("lena.jpg",CV_LOAD_IMAGE_UNCHANGED); 8 imshow("src",src); 9 Mat dst; 10 dst.create( src.size(), src.type()); 11 Mat map_x; 12 Mat map_y; 13 map_x.create( src.size(), CV_32FC1); 14 map_y.create( src.size(), CV_32FC1); 15 for( int i = 0; i < src.rows; ++i) 16 { 17 for( int j = 0; j < src.cols; ++j) 18 { 19 map_x.at<float>(i, j) = (float) i;//j;//(src.cols - j) ; 20 map_y.at<float>(i, j) = (float) j;//(src.rows - i) ; 21 } 22 } 23 remap(src, dst, map_x, map_y, CV_INTER_LINEAR); 24 imshow("dst", dst); 25 imwrite("invert3.jpg", dst); 26 waitKey(0); 27 system("pause"); 28 return 0; 29 }
结果图
二、图像倒置
1 #include <iostream> 2 #include <opencv2/opencv.hpp> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 Mat src = imread("lena.jpg",CV_LOAD_IMAGE_UNCHANGED); 8 imshow("src",src); 9 Mat dst; 10 dst.create( src.size(), src.type()); 11 Mat map_x; 12 Mat map_y; 13 map_x.create( src.size(), CV_32FC1); 14 map_y.create( src.size(), CV_32FC1); 15 for( int i = 0; i < src.rows; ++i) 16 { 17 for( int j = 0; j < src.cols; ++j) 18 { 19 map_x.at<float>(i, j) = (float) j;//j;//(src.cols - j) ; 20 map_y.at<float>(i, j) = (float) (src.rows - i) ; 21 } 22 } 23 remap(src, dst, map_x, map_y, CV_INTER_LINEAR); 24 imshow("dst", dst); 25 imwrite("invert.jpg", dst); 26 waitKey(0); 27 system("pause"); 28 return 0; 29 }
倒置结果图
三、图像水平镜像
1 #include <iostream> 2 #include <opencv2/opencv.hpp> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 Mat src = imread("lena.jpg",CV_LOAD_IMAGE_UNCHANGED); 8 imshow("src",src); 9 Mat dst; 10 dst.create( src.size(), src.type()); 11 Mat map_x; 12 Mat map_y; 13 map_x.create( src.size(), CV_32FC1); 14 map_y.create( src.size(), CV_32FC1); 15 for( int i = 0; i < src.rows; ++i) 16 { 17 for( int j = 0; j < src.cols; ++j) 18 { 19 map_x.at<float>(i, j) = (float) (src.cols - j) ; 20 map_y.at<float>(i, j) = (float) i;//(src.rows - i) ; 21 } 22 } 23 remap(src, dst, map_x, map_y, CV_INTER_LINEAR); 24 imshow("dst", dst); 25 imwrite("invert2.jpg", dst); 26 waitKey(0); 27 system("pause"); 28 return 0; 29 }
水平镜像结果图
四、水平镜像倒置
1 #include <iostream> 2 #include <opencv2/opencv.hpp> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 Mat src = imread("lena.jpg",CV_LOAD_IMAGE_UNCHANGED); 8 imshow("src",src); 9 Mat dst; 10 dst.create( src.size(), src.type()); 11 Mat map_x; 12 Mat map_y; 13 map_x.create( src.size(), CV_32FC1); 14 map_y.create( src.size(), CV_32FC1); 15 for( int i = 0; i < src.rows; ++i) 16 { 17 for( int j = 0; j < src.cols; ++j) 18 { 19 map_x.at<float>(i, j) = (float) (src.cols - j) ; 20 map_y.at<float>(i, j) = (float) (src.rows - i) ; 21 } 22 } 23 remap(src, dst, map_x, map_y, CV_INTER_LINEAR); 24 imshow("dst", dst); 25 imwrite("invert2.jpg", dst); 26 waitKey(0); 27 system("pause"); 28 return 0; 29 }
水平镜像倒置结果图
图像像素重映射见链接:https://www.cnblogs.com/Jack-Elvis/p/11526970.html