如何在python中扭曲图像?

时间:2019-01-17 18:44:05

标签: python image-processing

如何使用下图所示的变形来变换图像以产生变形效果

左图是输入,右图是输出(扭曲版本)

我阅读了这篇文章Image warping,并发现了一些提示。现在我的问题是如何计算偏移量?

enter image description here

1 个答案:

答案 0 :(得分:0)

这似乎是scipy.ndimage.geometric_transform的使命。 考虑以下示例,使用

1 2
3 4

作为输入2D数组

t = np.array([[1,2],[3,4]],dtype='uint8') #our input array
def func(x):
    return (x[1],x[0])
out = scipy.ndimage.geometric_transform(t,func)
print(out)

输出:

[[1 3]
 [2 4]]

那怎么了?对于输入中的每个单元格,将计算以该单元格位置(元组)作为参数的func并将其输出用作该单元格的新位置,请记住索引从0开始并且以y,x的方式出现:

  • 1个位置是0,0
  • 2位是0,1
  • 3个职位是1,0
  • 4个位置是1,1

我的示例函数只需用x切换y即可

  • 1个新职位是0,0
  • 2个新职位为1,0
  • 3个新职位是0,1
  • 4个新职位是1,1

实际上您可以在输出中看到。

如果只想转换灰度图像,则使用cv2.imread函数可以轻松地将图像读取到numpy数组中,这比处理2D数组而不是3D数组更容易。加载灰度图像时,请记住使用cv2.imread('someimage.bmp',0)(将0作为第二个参数)。

主要挑战是创建函数:假设灰度输入为2元组-“施主”像素的位置,输出为2元组-“收件人”的位置,请注意,此功能不必覆盖整个输出区域-如果输出像素缺少“施主”,则会进行插补。