随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

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   飘杨......  阅读(281)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2020-02-23 使用Gson+泛型制作一个序列化和反序列化的工具类
2020-02-23 Gson使用方法详解
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示