我觉得这真的很简单,但是我似乎完全陷入了困境。我正在尝试使用边界框,然后将其重新采样为MxN。假设我要把狗的边界框重新采样为256x256。这会弄乱纵横比,但是没关系。
在matlab中,我将使用interp2
。在python中,我尝试了scipy.interpolate.interp2d
和scipy.interpolate.RectBivariateSpline
。
我遇到如下错误:
*** ValueError: x dimension of z must have same number of elements as x
但是我希望 x和z具有不同数量的元素。插值的重点不是在给定范围内增加元素数量吗?
我尝试使用interp2d
和RectBivariateSpline
以及线性和网格输入。将裁剪和插值分解为两个单独的步骤也无济于事。
这是我的尝试:
from PIL import Image
import requests
from io import BytesIO
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
url = "https://i.stack.imgur.com/7zYzr.png"
response = requests.get(url)
img = np.array(Image.open(BytesIO(response.content)))
print(img.shape)
plt.figure()
plt.imshow(img)
plt.draw()
bbox = [0, 82, 181, 412]
crop_w = 256
crop_h = 256
x = np.linspace(bbox[0],bbox[2],crop_w)
y = np.linspace(bbox[1],bbox[3],crop_h)
my_crop = np.zeros((crop_w, crop_h, 3))
for RGB in range(3):
my_crop[:,:,RGB] = interpolate.RectBivariateSpline(x, y, img[:,:,RGB])
plt.figure()
plt.imshow(my_crop)
plt.show()