opencv--图像重映射函数 remap

 一、什么叫重映射:就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。

 

二、映射原理:

    x轴:遍历 原图x轴  取出每个像数元素,复制到  新图像x轴

    y轴:遍历 原图y轴  取出每个像数元素,复制到  新图像y轴

 

三、应用场景:

  -》放大:

  -》缩小

  -》翻转

  -》对调

 

四:函数说明:

  void remap(

      InputArray src,      //  输入图像,即原图像,需要单通道8位或者浮点类型的图像

        OutputArray dst,   //   输出图像,即目标图像,需和原图形一样的尺寸和类型

      InputArray map1,  //  它有两种可能表示的对象:(1)表示点(x,y)的第一个映射;(2)表示CV_16SC2,CV_32FC1等

      InputArray map2,       //  它有两种可能表示的对象:(1)若map1表示点(x,y)时,这个参数不代表任何值;(2)表示 CV_16UC1,CV_32FC1类型的Y值

                      int interpolation,   //   插值方式,有四中插值方式:(1)INTER_NEAREST——最近邻插值

                                 (2)INTER_LINEAR——双线性插值(默认)

                                                                                  (3)INTER_CUBIC——双三样条插值(默认)

                                 (4)INTER_LANCZOS4——LANCZOS插值(默认)      

      intborderMode = BORDER_CONSTANT,    // 边界模式,默认BORDER_CONSTANT

                      const Scalar& borderValue = Scalar()    // 边界颜色,默认Scalar()黑色

    )

 

四、应用例子:

  Mat image = imread("C:/Users/CH210315/Desktop/tmp/img/3.jpg");

  Mat img_dst,img_x,img_y;
  img_dst.create(image.size(),image.type());
  img_x.create(image.size(), CV_32FC1);
  img_y.create(image.size(), CV_32FC1);
  //双层循环,遍历每一个像素点,改变map_x和map_y的值
  for (int j = 0; j < image.rows; j++)
  {
    for (int i = 0; i < image.cols; i++)
    {
      //改变img_x和img_y的值
      img_x.at<float>(j, i) = static_cast<float>(image.rows - i);
      img_y.at<float>(j, i) = static_cast<float>(image.rows - j);
    }
  }
  //进行重映射操作
  remap(image, img_dst, img_x, img_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(255, 0, 0));
  //显示效果图
  imshow("效果图", img_dst);

  imshow("image", image);

 

posted @   dcli  阅读(661)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示