用Python进行图像扭曲

用Python进行图像扭曲,python,image-processing,Python,Image Processing,我需要在Python中扭曲一个相对较大的图像(1679x1475)。我有变换后的坐标。如何有效地将图像扭曲到变换后的坐标系。我尝试了scipy.interpolate.griddata,但很快我的计算机内存就用完了。OpenCV为此提供了一个函数cv2.resize()。可以手动指定图像的大小,也可以指定比例因子。使用不同的插值方法。较好的插值方法是用于收缩的cv2.中间区域,以及用于缩放的cv2.中间立方(慢)&cv2.中间线性。默认情况下,使用的插值方法是cv2.INTER_LINEAR,用

我需要在Python中扭曲一个相对较大的图像(1679x1475)。我有变换后的坐标。如何有效地将图像扭曲到变换后的坐标系。我尝试了scipy.interpolate.griddata,但很快我的计算机内存就用完了。

OpenCV为此提供了一个函数
cv2.resize()
。可以手动指定图像的大小,也可以指定比例因子。使用不同的插值方法。较好的插值方法是用于收缩的
cv2.中间区域
,以及用于缩放的
cv2.中间立方(慢)
&
cv2.中间线性
。默认情况下,使用的插值方法是
cv2.INTER_LINEAR
,用于所有调整大小的目的。可以通过以下方法之一调整输入图像的大小:

import cv2
import numpy as np

img = cv2.imread('messi5.jpg')

res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)

#OR

height, width = img.shape[:2]
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC)
你想要的。可以配置插值方法及其处理原始图像之外的点的方式。 例如:

import numpy as np
from scipy import misc
#create a 2D array that has a grayscale image of a raccoon
face = misc.face(gray=True)

import matplotlib.pyplot as plt
plt.imshow(face,cmap=plt.cm.gray)


我不想调整图像大小,请在不同的坐标系中绘制图像。我有I(x,y),我需要绘制I(p(x,y),q(x,y))。
#set up our new coordinate system
rows,cols = np.mgrid[0:768, 0:1024]
rows = rows**(1/2) * 767**(1/2)
cols = cols**(2) / 1023
rows = np.roll(rows,150,0)

from scipy import ndimage
#warp the image using a 3rd order (cubic) spline interpolation
new_img = ndimage.map_coordinates(face,[rows,cols], order=3)
plt.figure()
plt.imshow(new_img,cmap=plt.cm.gray)