文章目录

  • 一、背景
  • 二、Notes
    • (一)更新几个小例子方面理解remap
      • 1. 利用remap 进行 copy
      • 2.进行翻转

学习remap的时候发现map1和map2的参数跟我的直观理解略有差别,在次记录一下。

一、背景

把一幅图像内的像素点放置到另外一幅图像内的指定位置,这个过程称为重映射。OpenCV 提供了多种重映射方式,但是我们有时会希望使用自定义的方式来完成重映射。OpenCV 内的重映射函数 cv2.remap()提供了更方便、更自由的映射方式,其语法格式如下:dst=cv2.remap(src,map1,map2,interpolation[,borderMode[,borderValue]])式中:
● dst 代表目标图像,它和 src 具有相同的大小和类型。
● src 代表原始图像。
● map1 参数有两种可能的值:
1 表示(x,y)点的一个映射。
2 表示 CV_16SC2 ,CV_32FC1的 x 值。
● map2 参数有两种可能的值:
1 空。
2 表示 CV_16SC2 ,CV_32FC1的y 值。
● Interpolation 代表插值方式,这里不支持 INTER_AREA 方法。具体值参见表 5-1。
● borderMode 代表边界模式。当该值为 BORDER_TRANSPARENT 时,表示目标图像内的对应源图像内奇异点(outliers)的像素不会被修改。
● borderValue 代表边界值,该值默认为 0。

5.5.1映射参数的理解
重映射通过修改像素点的位置得到一幅新图像。在构建新图像时,需要确定新图像中每.
个像素点在原始图像中的位置。因此,映射函数的作用是查找新图像像素在原始图像内的位
置。该过程是将新图像像素映射到原始图像的过程,因此被称为反向映射。在函数
cv2.remap()中,参数map1和参数map2用来说明反向映射,map1针对的是坐标x,
map2针对的是坐标y。
需要说明的是,map1和map2的值都是浮点数。因此,目标图像可以映射回一个非整
数的值,这意味着目标图像可以「反向映射」到原始图像中两个像素点之间的位置(当 然,
该位置是不存在像素值的)。这时,可以采用不同的方法实现插值,函数中的interpolation 参
数可以控制插值方式。正是由于参数map1和参数map2的值是浮点数,所以通过函数
cv2.remamp () 所能实现的映射关系变得更加随意,可以通过自定义映射参数实现不同形式
的映射。

以上内容摘自《OpenCV轻松入门》

阅读完这一段,我从直觉上认为mapx应该控制x,mapy应该控制y。

试了一下

import numpy as np
import cv2 as cvimg = np.random.randint(0, 256, size=[4, 5], dtype=np.uint8)
rows, cols = img.shape[0:2]
mapx = np.ones(img.shape, np.float32) * 3;
mapy = np.ones(img.shape, np.float32) * 0;
rst = cv.remap(img, mapx, mapy, cv.INTER_LINEAR)

运行结果:

从结果上看,是mapx控制了y,mapy控制了x?

二、Notes

照例,先阅读官方文档

阅读官方文档是会有收获的:Due to current implementation limitations the size of an input and output images should be less than 32767x32767.

由于当前方案的限制,remap最大只支持32767*32767.

阅读了官方文档仍然没有得到答案,
又去翻了翻代码;
突然一拍脑袋,
这x=1可不就是确定的一列吗?
mapx当然管列号了啊…

矩阵、数组的行列表达方式用惯了,
形成了思维定式,
反思反思

综上,简单来讲:

map1 代表的是在原位置的列号,map2 是行号

(一)更新几个小例子方面理解remap

1. 利用remap 进行 copy

import numpy as np
import cv2 as cvimg = np.random.randint(0, 256, size=[4, 5], dtype=np.uint8)
rows, cols = img.shape[0:2]
mapx=np.array([[i for i in range(5)] for j in range(4)],dtype=np.float32)
mapy=np.array([[j for i in range(5)] for j in range(4)],dtype=np.float32)
rst = cv.remap(img, mapx, mapy, cv.INTER_LINEAR)

效果:


复制成功

2.进行翻转

这里以上下翻转为例

img = np.random.randint(0, 256, size=[4, 5], dtype=np.uint8)
rows, cols = img.shape[0:2]
mapx=np.array([[i for i in range(5)] for j in range(4)],dtype=np.float32)
mapy=np.array([[j for i in range(5)] for j in range(3,-1,-1)],dtype=np.float32)
rst = cv.remap(img, mapx, mapy, cv.INTER_LINEAR)

做了这两个小练习,我已经好了,你呢~(手动滑稽

[OpenCV] cv.remap() 重映射学习笔记/map1 map2易混点相关推荐

  1. Kruskal重构树 学习笔记

    Kruskal重构树 学习笔记 文章目录 Kruskal重构树 学习笔记 前言 例题1 BZOJ3732 Network 例题2 [NOI2018] 归程 前言 Kruskal重构树是一种比较冷门的算 ...

  2. 【OpenCV 】Remapping 重映射¶

    目录 1.1目标 1.2 理论 1.3 代码 1.4 运行结果 1.1目标 展示如何使用OpenCV函数 remap 来实现简单重映射. 1.2 理论 把一个图像中一个位置的像素放置到另一个图片指定位 ...

  3. 用opencv实现目标追踪的学习笔记——camshift

    小白的学习笔记--opencv camshift -基础:零c++基础,零opencv基础,简单C语言基础,略知数字图像处理知识 -工具:VS2015+opencv 2.4.13 -sample: E ...

  4. opencv 叠加文字_opencv3.1学习笔记(8) 绘制形状与文字

    绘制形状比较简单,基本上没啥子好说的,见代码. 演示代码:#include #include using namespace std; using namespace cv; Mat bgImage; ...

  5. python怎么测试opencv安装是否成功_学习笔记:自己编译安装OpenCV+测试opencv安装是否成功...

    跟着猿人学python,我的学习笔记.本次的配置在ubuntu中成功安装了opencv,并通过以下方法测试成功了.现将具体的安装及测试过程整理出来分享给大家. 1. 安装编译依赖的软件包 # 安装读写 ...

  6. 【CV】OpenCV(基于Python)学习笔记

    以下内容中的页码均来自<OpenCV 4详解 : 基于Python> 目录 第2章 载入.显示与保存数据 2.2 图像的读取与显示 2.2.1 图像读取函数 cv.imread() 2.2 ...

  7. mybatis resultMap映射学习笔记

    这几天,百度mybatis突然看不到官网了,不知道百度怎么整的.特此贴出mybatis中文官网: http://www.mybatis.org/mybatis-3/zh/index.html 一个学习 ...

  8. opencv物品定位_使用OpenCV获取零件位置的学习笔记

    最近公司接到一个案子,使用移动机械臂抓取圆盘上下料,目前我们的移动机器人定位精度在两厘米左右,因此需要视觉辅助定位来提高夹取的精度. 这个项目本身不是我做,出于对是视觉的兴趣,学习了一下如何使用Ope ...

  9. CV视觉论文alexnet学习笔记(二)

    <imageNet classification with Deep Convolutional Neural Network> 基于卷积神经网络的图像分类(经典网络) 作者:Alex K ...

最新文章

  1. 打包图片上传cdn_紧抓5G新时代机遇 又拍云创新发展CDN行业
  2. 使用Kettle抽取数据时,出现中文乱码问题解决方案
  3. 利用反射和xml配置文件手写一个小型的框架
  4. DXUT框架剖析(3)
  5. NLP之:百度SKEP
  6. 从键盘输入二叉树怎么输入_手机输入法派别之争!九宫格和全键盘谁才是正统...
  7. linux使用c语言获取网关地址
  8. 移动产品原型和线框图设计工具介绍
  9. irobot擦地机器人故障_不想跪下擦地板!iRobot新神器擦地机器人能否帮到你?
  10. Win11 Windows聚焦失效修复方法
  11. 转|函数零点问题考点透视
  12. 前端面试必考的「 Webpack详解 」都在这了
  13. html5dragw3c,HTML5拖拽功能drag
  14. 前沿技术讲座感悟以及关于互联网时代前沿技术的个人理解与思考
  15. matlab求两向量夹角_MATLAB图形的标注与修饰
  16. 产品经理培训还好找工作吗?
  17. java中级程序员全面学习路线教程
  18. 前端代码 (html css JavaScript DOM JSON)
  19. where 空集_MySQL where 条件的这个坑你碰到过没
  20. 数据库身份证号加密密码加密_使用基于密码的加密保护会议室数据库

热门文章

  1. 2021年淘宝双11跨店满减如何使用?
  2. 飞行控制计算机英语怎么说,“飞行模式”英语怎么说
  3. Fuchsia 系统的编译和探索
  4. IP协议详解之IPv6头部结构简介
  5. thinkphp6手册_ThinkPHP6.0完全开发手册(官方版)
  6. 对C++一脸懵逼却又无比热爱的第一篇
  7. 使用IDLE进行编程
  8. 计算机毕业设计之java+ssm校园外卖配送系统
  9. Android常见公有方法(隐藏虚拟按键/隐藏软键盘/获取屏幕宽高等)
  10. 基于canvas+uniapp的9宫格拼图游戏组件