opencv中重映射函数 remap() 的python实现
dst=cv.remap(src, map1, map2, interpolation[, dst[, borderMode[, borderValue]]])
Parameters
src | Source image. |
map1 | 类型为CV_16SC2、CV_32FC1或CV_32FC2的(x,y)点或x值的第一个映射。有关将浮点表示转换为定点的详细信息,请参阅convertMaps。 |
map2 | 第二个y值的映射分别具有CV_16UC1、CV_32FC1或none类型(如果map1是(x,y)点,则为空映射)。 |
那么在python 中 map1 和 map2 该如何生成呢。
srcImage=cv2.imread("sunnys.jpg") #读取源图片
cv2.imshow("原始图",srcImage) #显示原始图
sp = srcImage.shape[:2]
map_x = np.zeros((sp[0],sp[1]),np.float32)
map_y = np.zeros((sp[0],sp[1]),np.float32)
使用 shape 获取图像大小 使用np.zeros生成图像数组
源码:
def remapDemo():
"""remap python实现"""
srcImage=cv2.imread("sunnys.jpg") #读取源图片
cv2.imshow("原始图",srcImage) #显示原始图
sp = srcImage.shape[:2]
map_x = np.zeros((sp[0],sp[1]),np.float32)
map_y = np.zeros((sp[0],sp[1]),np.float32)
for y in range(0,int(sp[0]-1)):
for x in range(0,int(sp[1]-1)):
xS = y
yS = len(srcImage[y])-x
map_x[y,x]=xS
map_y[y,x]=yS
dstImg=cv2.remap(srcImage, map_x, map_y, cv2.INTER_LINEAR)
while(True):
cv2.imshow('dstImg',dstImg)
c=cv2.waitKey(1)
if c==27:
break
效果图: