代码之家  ›  专栏  ›  技术社区  ›  Raksha

如何调整子块的高度和宽度以使其紧密贴合?

  •  1
  • Raksha  · 技术社区  · 6 年前

    我有一个代码可以将图片分成多个部分,我想把它们一起打印出来(中间有一个小的空间),但是保持相同的大小,这样完整的图片仍然清晰可见。

    def crop_image(img, quadrant):
        img = img_to_array(img)
        d = img.shape
        rows = int(d[0]*2/3)
        cols = int(d[1]*2/3)
        q = {"TL": img[:rows,:cols,:],
             "TR": img[:rows,cols:,:],
             "BL": img[rows:,:cols,:],
             "BR": img[rows:,cols:,:]}
        return array_to_img(q[quadrant])
    
    img = load_img('./example1.jpeg', target_size=(224, 224))
    cropped = crop_image(img, 'TR')
    fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2,2)
    ax1.imshow(crop_image(img, 'TL'))
    ax1.axis('off')
    ax2.imshow(crop_image(img, 'TR'))
    ax2.axis('off')
    ax3.imshow(crop_image(img, 'BL'))
    ax3.axis('off')
    ax4.imshow(crop_image(img, 'BR'))
    ax4.axis('off')
    fig.subplots_adjust(hspace=0.1)
    plt.tight_layout()
    

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   ImportanceOfBeingErnest    6 年前

    子块高度和宽度之间的比率需要正好是图形各个部分的行数和列数之间的比率。

    这可以通过 height_ratios width_ratios 正在使用gridspec的参数。

    import matplotlib.pyplot as plt
    
    img = plt.imread("https://i.stack.imgur.com/9qe6z.png")
    d = img.shape
    rows = int(d[0]*2/3)
    cols = int(d[1]*2/3)
    q = {"TL": img[:rows,:cols,:],
         "TR": img[:rows,cols:,:],
         "BL": img[rows:,:cols,:],
         "BR": img[rows:,cols:,:]}
    
    kw = dict(height_ratios=[rows, d[0]-rows], width_ratios=[cols, d[1]-cols])
    
    fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2,2, gridspec_kw=kw)
    ax1.imshow(q['TL'])
    ax2.imshow(q['TR'])
    ax3.imshow(q['BL'])
    ax4.imshow(q['BR'])
    
    for ax in (ax1, ax2, ax3, ax4):
        ax.axis("off")
    fig.subplots_adjust(hspace=0.1)
    
    plt.show()
    

    enter image description here