我正在尝试将从原始32x32的cifar10检索到的图像调整为与MobileNetV2一起使用的96x96,但是我遇到了这个错误。尝试了各种解决方案,但似乎无济于事。
我的代码:
for a in range(len(train_images)):
train_images[a] = cv2.resize(train_images[a], dsize=(minSize, minSize), interpolation=cv2.INTER_CUBIC)
我遇到的错误:
----> 8 train_images[a] = cv2.resize(train_images[a], dsize=(minSize, minSize), interpolation=cv2.INTER_CUBIC)
ValueError: could not broadcast input array from shape (96,96,3) into shape (32,32,3)
答案 0 :(得分:1)
有时您必须将图像从RGB转换为灰度。如果出现问题,您唯一要做的就是gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
,调整图像大小,然后再次resized_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2RGB)
我从来没有遇到过这个错误,但是如果第一个选项不起作用,您可以尝试像这样用枕头调整图像大小:
from PIL import Image
im = Image.fromarray(cv2_image)
nx, ny = im.size
im2 = im.resize((nx*2, ny*2), Image.LANCZOS)
cv2_image = cv2.cvtColor(numpy.array(im2), cv2.COLOR_RGB2BGR)
您可以将其变成函数并在列表推导中调用它。我希望这可以解决您的问题:)
答案 1 :(得分:0)
这仅仅是因为您正在从train_images中读取32x32图像,并试图将重塑图像(96x96)保存在同一阵列中,这是不可能的! 尝试类似的东西:
train_images_reshaped = np.array((num_images, 96, 96, 3))
for a in range(len(train_images)):
train_images_reshaped[a] = cv2.resize(train_images[a], dsize=(minSize, minSize), interpolation=cv2.INTER_CUBIC)
答案 2 :(得分:0)
OpenCV中有一些插值算法。如-
代码:
image_scaled=cv2.resize(image,None,fx=.75,fy=.75,interpolation = cv2.INTER_LINEAR)
img_double=cv2.resize(image,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
image_resize=cv2.resize(image,(200,300),interpolation=cv2.INTER_AREA)
image_resize=cv2.resize(image,(500,400),interpolation=cv2.INTER_LANCZOS4)
您还可以在这里找到有关 python实现的详细信息:How to resize images in OpenCV python