【发布时间】:2020-12-03 09:51:39
【问题描述】:
我正在尝试将输入图像的大小调整为 736 x 736 作为输出大小,同时保留原始图像的纵横比并在此过程中添加零填充。
函数image_resize_add_padding() 工作正常,并且正在做我想做的事情。使用cv2.imshow() 函数显示时调整大小的图像看起来不错
但是在使用cv2.imwrite() 函数保存时,它似乎是一个全黑的图像。
如何在显示时保存正确的图像?
import cv2
import numpy as np
def image_resize_add_padding(image, target_size):
ih, iw = target_size
h, w, _ = image.shape
scale = min(iw/w, ih/h)
nw, nh = int(scale * w), int(scale * h)
image_resized = cv2.resize(image, (nw, nh))
image_paded = np.full(shape=[ih, iw, 3], fill_value=128.0)
dw, dh = (iw - nw) // 2, (ih-nh) // 2
image_paded[dh:nh+dh, dw:nw+dw, :] = image_resized
image_paded = image_paded / 255.
return image_paded
input_size = 736
image_path = "test_image.jpg"
original_image = cv2.imread(image_path)
output_image = image_resize_add_padding(
np.copy(original_image), [input_size, input_size])
cv2.imshow('image', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('test_output.jpg', output_image)
【问题讨论】:
-
你试过这篇文章的步骤了吗? stackoverflow.com/questions/19239381/…
-
@MightyDiffy 感谢您的参考。上面帖子中的最佳答案是将输出图像乘以 255 以获得正确的范围。我之前确实尝试过,或者我可以删除将 image_paded 输出除以 255 的部分。但它没有用。
标签: python opencv image-resizing