图像几何变换方法之——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;
- }