使用Python进行图像变形

时间:2014-08-06 20:00:31

标签: python image-processing

我需要在Python中扭曲相对较大尺寸(1679x1475)的图像。我有变换后的坐标。如何有效地将图像扭曲到变换的坐标系。我试过scipy.interpolate.griddata,但很快我的电脑内存不足。

2 个答案:

答案 0 :(得分:0)

为此,OpenCV附带了一个函数cv2.resize()。可以手动指定图像的大小,也可以指定缩放系数。使用不同的插值方法。优选的插值方法是cv2.INTER_AREA用于收缩和cv2.INTER_CUBIC (slow)& cv2.INTER_LINEAR用于缩放。默认情况下,对于所有调整大小,使用的插值方法为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)

答案 1 :(得分:0)

你想要scipy.ndimage.map_coordinates。您可以配置插值方法以及它如何处理原始图像之外的点。 一个例子:

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)

the unwarped image looks like this

#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)

the image after warping