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