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); 8imshow("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