OpenCV图像像素映射

一、概述

  案例:实现一个图片左右翻转(照镜子),上下翻转(倒立)的效果  

映射函数介绍:
Remap( InputArray src,
// 输入图像 OutputArray dst,// 输出图像 InputArray map1,// x 用于存放图像X方向的映射关系,类型必须是CV_32FC1的。 InputArray map2,// y 用于存放图像Y方向的映射关系,类型必须是CV_32FC1的。 int interpolation,// 选择的插值方法,常见线性插值,可选择立方等 int borderMode,// BORDER_REPLICATE:重复、BORDER_REFLECT:反射、BORDER_REFLECT_101:反射101、BORDER_WRAP:外包装、BORDER_CONSTANT:常量复制 const Scalar borderValue// color )

  实现步骤:

  1.加载原图

  2.获取x方向的映射、y反向的映射

  3.调用remap函数传入参数实现映射

  4.输出映射后的图像

二、代码示例

 Mat src = imread(filePath);
    if(src.empty()){
        return;
    }
    imshow("src",src);
    Mat dst,map_x,map_y;
    map_x.create(src.size(),CV_32FC1);
    map_y.create(src.size(),CV_32FC1);
    for(int i=0;i<src.rows;i++){
        float *ptrX = map_x.ptr<float>(i);//获取一列像素
        float *ptrY = map_y.ptr<float>(i);
        for(int j=0;j<src.cols;j++){
//            //左右像素对调,其实就是把坐标给互换掉
//            ptrX[j] = (float)(src.cols-j);
//            ptrY[j] = (float)i;
            //上下对调
            ptrX[j] = (float)j;
            ptrY[j] = (float)(src.rows-i);
        }
    }
    remap(src,dst,map_x,map_y,BORDER_CONSTANT);
    imshow("remap",dst);

 

三、效果展示

  1.上下翻转效果图

 

  2.左右互换效果图

 

posted on 2022-02-23 15:47  飘杨......  阅读(314)  评论(0)    收藏  举报