本章内容
重映射、x轴翻转,y轴翻转,xy轴镜像,图像缩小
输出结果:
源码
#include <ostream>
#include <opencv.hpp>
#include <math.h>
int main(int argc, char *argv[])
{
/*
本章内容:
重映射Reamap
*/
cv::String fileName = "/home/wang/dev/Image/biuld.jpeg";
cv::String fileName1 = "/home/wang/dev/Image/pingpang.jpeg";
cv::Mat src = cv::imread(fileName);
cv::Mat src2 = cv::imread(fileName1);
if(src.data == NULL){
printf("图像读入失败\n");
return -1;
}
/*重映射
* api接口:CV_EXPORTS_W void remap( InputArray src, OutputArray dst,
InputArray map1, InputArray map2,
int interpolation, int borderMode = BORDER_CONSTANT,
const Scalar& borderValue = Scalar());
@param map1 x轴映射
@param map2 y轴映射
@param interpolation Interpolation method (see #InterpolationFlags).
enum InterpolationFlags {
INTER_NEAREST = 0,
INTER_LINEAR = 1,
INTER_CUBIC = 2,
}
*/
cv::Mat mapX(src.rows,src.cols,CV_32FC1);
cv::Mat mapY(src.rows,src.cols,CV_32FC1);
cv::String winName = "";
for(int i=0; i < src.rows;i++){
for(int j=0; j <src.cols;j++){
switch(0){
case 0:
winName="关于x轴翻转";
mapX.at<float>(i,j) = src.cols - j; //关于x轴翻转
mapY.at<float>(i,j) =i;
break;
case 1: // 关于y轴翻转
winName="关于y轴翻转";
mapX.at<float>(i,j) = j;
mapY.at<float>(i,j) =src.rows - i ;
break;
case 2: // 关于x,y翻转
winName="关于x,y翻转";
mapX.at<float>(i,j) = src.cols - j;
mapY.at<float>(i,j) =src.rows - i ;
break;
case 3: // 缩小并平移
winName="缩小并平移";
mapX.at<float>(i,j) = j*2 - src.cols/4;
mapY.at<float>(i,j) = i*2 - src.rows/4;
break;
}
}
}
cv::Mat dstX;
cv::remap(src,dstX,mapX,mapY,cv::INTER_LINEAR);
cv::imshow("src",src);
cv::imshow(winName,dstX);
cv::waitKey(0);
return 1;
}