You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook中用Matplotlib并排显示相册图片函数故障求助

解决Jupyter Notebook中Matplotlib并排显示相册图片的问题

我帮你梳理下原代码里的几个核心问题,然后给出能实现网格并排显示的修正版本~

原代码的问题点:

  • 错误使用了list.get(path):list是Python内置类型,没有get方法,你应该是想获取指定目录下的图片路径列表,需要用文件操作相关的工具(比如os模块)来实现。
  • 未定义的变量images:代码里cv2.imread(images)中的images没有声明,应该是遍历到的单个图片路径(另外别用iter当变量名,它是Python内置函数,换成img_path更清晰)。
  • 没有利用子图对象实现并排:你虽然创建了fig, ax = plt.subplots(nrows=2, ncols=2),但原函数完全没用到这些子图,反而每次循环单独调用plt.show(),这会导致图片逐个弹出,没法实现并排布局。

修正后的完整代码

import cv2
import numpy as np
import matplotlib.pyplot as plt
import os

def show_images_in_grid(folder_path, rows=2, cols=2):
    # 获取文件夹下的所有图片路径(可根据需要添加/修改图片格式后缀)
    img_paths = [os.path.join(folder_path, filename) 
                 for filename in os.listdir(folder_path) 
                 if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp'))]
    
    # 确保要显示的图片数量不超过子图总数
    total_imgs = min(len(img_paths), rows * cols)
    
    # 创建子图网格,设置合适的画布大小
    fig, axes = plt.subplots(nrows=rows, ncols=cols, figsize=(10, 8))
    # 将二维的axes数组转为一维,方便循环遍历
    axes = axes.flatten()
    
    for idx in range(total_imgs):
        current_path = img_paths[idx]
        # 读取图片
        img = cv2.imread(current_path)
        if img is None:
            print(f"警告:无法读取图片 {current_path}")
            axes[idx].axis('off')
            continue
        # OpenCV默认读入BGR格式,转为Matplotlib需要的RGB格式
        img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        # 在对应子图中显示图片
        axes[idx].imshow(img_rgb)
        # 关闭子图的坐标轴
        axes[idx].axis('off')
    
    # 隐藏多余的子图(如果图片数量不足rows*cols)
    for idx in range(total_imgs, rows * cols):
        axes[idx].axis('off')
    
    # 自动调整子图间距,让布局更美观
    plt.tight_layout()
    # 显示整个网格图
    plt.show()

使用方法

在Jupyter Notebook里直接调用函数,传入你的相册文件夹路径即可:

# 替换成你的相册文件夹绝对/相对路径
show_images_in_grid("path/to/your/photo/album")

额外说明

  • 代码里过滤了常见的图片格式,如果你的相册里有其他格式(比如.webp),可以添加到endswith的参数里;
  • 处理了图片无法读取的情况,避免程序崩溃;
  • 通过plt.tight_layout()自动调整子图之间的间距,避免图片被裁剪或重叠;
  • 如果相册里的图片数量超过4张(2行2列),只会显示前4张,你可以修改函数的rows和cols参数来调整网格大小,比如show_images_in_grid("your/path", rows=3, cols=3)实现3x3的布局。

内容的提问来源于stack exchange,提问作者glomba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:59:22