Python 同一窗口显示多张图片(同时读取文件夹下所有图片)

这篇博客记录了如何使用Python在同一窗口中横向展示文件夹下的所有图片,提供了简洁的代码示例,并附带了实际效果的展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为百度了好几次才找到自己想要的东西,因此记录下来。一方面方便自己以后用;另一方面分享给大家。

长话短说,直接贴代码:

import cv2 as cv
import os
import numpy as np

img_path='./Track1_Saliency/Images/' #图像路径
re_path='./Track1_Saliency/Results/' #图像路径

img_num=len(os.listdir(img_path)) #计算目录下有多少图像

#注:如果文件名不是顺序排列(1,2,3,4....n),可以用以下方式取文件
#img_list=os.listdir(img_path)
#re_list=os.listdir(re_path)

for i in range(1,img_num+1): #
    img_name=img_path+str(i)+'.png' #图像格式为“.png”
    re_name=re_path+str(i)+'.png'

    #当文件名不是顺序排列时
    #img_name=img_path+img_list[i]
    #re_name=re_path+re_list[i]

    img=cv.imread(img_name)
    re=cv.imread(re_name)

    img=cv.resize(img,(512,512))
    re=cv.resize(re,(512,512))

    cv.namedWindow('Results', cv.WINDOW_AUTOSIZE)

    h_all=np.hstack((img,re)) #参数(img,re)取决于你要横向排列的图像个数
    #v_all=np.vstack((img,re)) #纵向排列

    cv.imshow('Results', h_all)
    cv.waitKey(100) #0.1s后进行下轮循环 
cv.destroyAllWindows()

效果图(在本例中,以横向排列两张图为例):</

### 如何在文件管理器或图像查看器中显示整个文件夹的所有图片 为了实现同一视图中浏览文件夹内的所有图片,可以采用以下方法: #### 使用缩略图模式 大多数现代操作系统自带的文件管理器支持以缩略图形式展示图片。启用此功能后,可以在同一窗口中看到文件夹中的所有图片的小型预览版本[^1]。 对于 Windows 用户: - 打开资源管理器并导航到目标文件夹。 - 调整右侧窗格的视图为“大图标”或者“超大图标”,这样就可以在同一界面中快速浏览所有的图片文件。 对于 macOS 用户: - 利用 Finder 进入指定目录。 - 更改显示方式为“图标”视图,并增大图标尺寸以便更清晰地观察每张照片的内容。 #### 借助专门软件 除了默认工具外,还有许多第三方应用程序提供更加高级的功能来处理大量图像资料。例如 IrfanView 或者 XnView MP 等轻量级却强大的图像浏览器允许用户加载整个文件夹作为幻灯片放映列表的同时也提供了网格布局选项用于概览全部项目[^2]。 另外,在某些情况下可能还需要考虑硬件性能以及所选程序本身兼容性的因素;当遇到特定问题比如因自定义配置不当而导致崩溃现象时,则需排查相关设置路径下的异常情况(如 `custom\CustomImportRepo.local` 文件夹)[^2]。 #### 实现自动化脚本解决方案 (Python 示例) 如果偏好编程的话也可以编写简单的 Python 脚本来完成这需求。下面给出了段基于 PIL 库读取本地磁盘上的 JPEG 图像并将它们拼接成幅新图画的例子: ```python from PIL import Image, ImageDraw import os def create_contact_sheet(fnames, rows=5, cols=4): """Create a contact sheet from given image filenames.""" img_width = 192 img_height = 128 # Create the new image object with white background color. montage_img = Image.new('RGB', (img_width * cols + cols - 1, img_height * rows + rows - 1), 'white') draw = ImageDraw.Draw(montage_img) for i in range(len(fnames)): row = int(i / cols) col = i % cols try: im = Image.open(fnames[i]) aspect_ratio = float(im.size[1])/float(im.size[0]) height = int((img_width*aspect_ratio)) resized_im = im.resize((img_width,height)) box_x = col*(resized_im.width+1) box_y = row*(resized_im.height+1) montage_img.paste(resized_im,(box_x,box_y)) except Exception as e: print(e) return montage_img if __name__ == '__main__': path_to_images = './images/' fnames = [os.path.join(path_to_images,f) for f in os.listdir(path_to_images)] result_image = create_contact_sheet(fnames[:20],rows=5,cols=4) result_image.show() ``` 上述代码片段通过遍历指定目录获取其中前二十幅符合条件的JPEG格式文档名数组传给函数create_contact_sheet() ,最终得到由这些子画面组合而成的张综合性画布对象result_image 。调用show() 方法即可弹出窗口呈现效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值