如何使用python裁剪和插值图像的一部分

时间:2018-11-13 06:00:12

标签: python image image-processing scipy interpolation

我觉得这真的很简单,但是我似乎完全陷入了困境。我正在尝试使用边界框,然后将其重新采样为MxN。假设我要把狗的边界框重新采样为256x256。这会弄乱纵横比,但是没关系。

enter image description here

在matlab中,我将使用interp2。在python中,我尝试了scipy.interpolate.interp2dscipy.interpolate.RectBivariateSpline

我遇到如下错误:

*** ValueError: x dimension of z must have same number of elements as x

但是我希望 x和z具有不同数量的元素。插值的重点不是在给定范围内增加元素数量吗?

我尝试使用interp2dRectBivariateSpline以及线性和网格输入。将裁剪和插值分解为两个单独的步骤也无济于事。

这是我的尝试:

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

0 个答案:

没有答案