【问题标题】:Adding black pixels, squaring and resizing image添加黑色像素,平方和调整图像大小
【发布时间】:2021-04-09 19:48:24
【问题描述】:

我有一些尺寸不同的图片。 我想做以下事情:

  1. 读入图片。
  2. 通过添加黑色像素来对图像进行平方,使具有黑色像素的图像的高度和宽度取两者中较大的值,原始图像位于中心,像素均匀分布在下方或上方(在左/右)图像。
  3. 将图像大小调整为 224、224。

所以,我想编码的过程在图形上如下所示:

我编写了第 1 步和第 3 步的代码,但关于第 2 步,我遇到了困难:

file_name = "/path/to/image.png"
img = imread(file_name)
#Squaring, adding black pixel, center the image

img = resize(img, (224, 224))

【问题讨论】:

    标签: python scikit-image


    【解决方案1】:

    要执行第 2 步,您可以使用等于 0(黑色)的值“填充”图像,这就是我的做法:

    '''

    img = cv2.imread("image.png")
    
    if img.shape[0] != 224:
        img = cv2.resize(img, (224, img.shape[1]))
    
    if img.shape[0] < 224:
        padding_y = (224-img.shape[0])/2
        padded_img = np.pad(img[:,:,2], ((int(padding_y),int(padding_y)),(0,0)), mode='constant', constant_values=0)
    else:
        print("Y dimension is bigger than 224 pixels")
    

    '''

    首先我检查图像的形状,如果 x 轴不等于所需大小 (224),则调整大小。然后我检查 Y 轴是否小于我们想要的大小(再次为 224),如果小于,我们确定多少并将这个值除以 2,这个 padding_y 变量将是我们图像上方和下方的填充大小.最后,我们使用 numpy 包为图像添加内边距,内边距为黑色(constant_values=0)。

    请注意,此方法假定 Y 轴始终小于 224。

    【讨论】:

    • 感谢您的回答!但是我得到了几个错误,因为没有定义变量,如resized_imgpadding_y
    • 您好,我已经修改了答案,它应该可以工作。请注意,如果图像 Y 尺寸大于 224,则不会发生填充并显示打印消息。我希望它有所帮助。
    • 这个答案能解决你的问题吗?如果是的话,你可以关闭这个问题。
    【解决方案2】:

    要在边框处添加黑色像素,我使用 cv2.copyMakeBorder() 而不是 numpy.pad 更直接。这是一个有用的教程:https://docs.opencv.org/master/d3/df2/tutorial_py_basic_ops.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2012-07-14
      • 2013-12-24
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多