图像几何变换方法之——remap使用。
源图像
一、图像转置
#include
#include
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(i, j) = (float) i;//j;//(src.cols - j) ;
map_y.at(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
#include
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(i, j) = (float) j;//j;//(src.cols - j) ;
map_y.at(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
#include
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(i, j) = (float) (src.cols - j) ;
map_y.at(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
#include
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(i, j) = (float) (src.cols - j) ;
map_y.at(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;
}结果: