remap

函数功能

remap函数用于对图像进行重映射,可以实现对图像的任意几何变换,如旋转、缩放、扭曲等。通过指定源图像的像素在目标图像中的位置,remap函数可以生成变换后的图像,广泛应用于图像校正和立体视觉等领域。

函数接口

1
cv2.remap(src, map1, map2, interpolation=cv2.INTER_LINEAR, dst=None, borderMode=cv2.BORDER_CONSTANT, borderValue=None)

参数

参数名

描述

取值范围

输入/输出

src

输入图像。

非空

输入

map1

map1是二维数组,指定每个像素在源图像中的x坐标(或像素映射矩阵的第一部分)。

map的值应该是[0, width-1]之间的32位浮点数,其中width是src图像的宽度。

输入

map2

map2是二维数组,指定每个像素在源图像中的y坐标(或像素映射矩阵的第二部分)。

map2的值应该是[0, height-1]之间的32位浮点数,其中height是src图像的高度

输入

interpolation

插值方法,默认值为cv2.INTER_LINEAR,可选择cv2.INTER_NEAREST、cv2.INTER_CUBIC等。

cv2.INTER_LINEAR、cv2.INTER_NEAREST、cv2.INTER_CUBIC等

输入

dst

输出图像,可选,默认会创建新图像。

非空

输出

borderMode

边界模式,默认值为cv2.BORDER_CONSTANT,决定如何处理源图像外的像素。

常见的取值包括:cv2.BORDER_CONSTANT、

cv2.BORDER_REPLICATE、cv2.BORDER_REFLECT

输入

borderValue

边界值,仅在borderMode为BORDER_CONSTANT时有效。

  • 单通道灰度图像,borderValue通常是一个整数值
  • 多通道图像,borderValue是一个包含多个整数值的元组

输入

返回值

错误码

错误码

描述

INVALID_PARAM_MSG

参数“src”或“map1”或“map2”为空。

NOT_SUPPORT_MSG

输入“src”或“map1”或“map2”类型错误或不是“borderMode”支持的模式或不是“interpolation”支持的插值方法。

示例

 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
import numpy as np
import cv2

# 创建一个5x5的简单图像 
src = np.array([[0, 0, 0, 0, 0],
               [0, 1, 1, 1, 0],
               [0, 1, 0, 1, 0],
               [0, 1, 1, 1, 0],
               [0, 0, 0, 0, 0]], dtype=np.uint8)  

# 创建一个映射矩阵,用于定义图像的重映射 
map_x = np.array([[0, 1, 2, 3, 4],
                 [0, 1, 2, 3, 4],
                 [0, 1, 2, 3, 4],
                 [0, 1, 2, 3, 4],
                 [0, 1, 2, 3, 4]], dtype=np.float32)  

map_y = np.array([[0, 0, 0, 0, 0],
                 [1, 1, 1, 1, 1],
                 [2, 2, 2, 2, 2],
                 [3, 3, 3, 3, 3],
                 [4, 4, 4, 4, 4]], dtype=np.float32)

dst = cv2.remap(src, map_x, map_y, cv2.INTER_LINEAR)

print(dst)

运行结果:

1
2
3
4
5
[[0 0 0 0 0]
 [0 1 1 1 0]
 [0 1 0 1 0]
 [0 1 1 1 0]
 [0 0 0 0 0]]