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

如何将处理后的numpy图像数组存入Python字典并在Jupyter中展示?

问题描述

我在Python中创建了一个空字典,循环读取并处理图像,处理后的结果是numpy数组。希望把这些numpy数组添加到字典中,以顺序整数作为键、数组作为值存储,最终要把处理后的图像放到imagegrid里在Jupyter Notebook展示,已有针对字典中图像的展示代码,想知道怎么实现,有没有更简便的方式?

原始代码:

stopsign_classifier = cv2.CascadeClassifier('haarcascade_stopsigns.xml') 

img_dict = {}

folder = "D:\\temp\\"
for imagesdir in os.listdir(folder):
    imgName = imagesdir
    img = cv2.imread(folder + imgName)

    signs = stopsign_classifier.detectMultiScale(img, scaleFactor= 1.01, minNeighbors = 9)

    #检查照片中是否存在停车标识
    if signs is ():
        print("No stop signs found")
        # 根据停车标识分类器的返回信息,在识别出的停车标识周围绘制框
    else:
        for (x, y, w, h) in signs:
            cv2.rectangle(img, (x,y), (x+w,y+h), (255, 255 , 255), 8)
            
    # 在此处添加将img存入字典的代码
解决方案

一、按需求存入字典的实现

要实现顺序整数作为键,直接利用字典当前的长度作为下一个键即可(初始空字典长度为0,第一个键就是0,每添加一个元素长度加1,正好对应顺序整数)。在注释位置添加以下代码:

# 将处理后的图像存入字典,键为当前字典长度(顺序整数)
img_dict[len(img_dict)] = img

修改后的完整代码:

import os
import cv2

stopsign_classifier = cv2.CascadeClassifier('haarcascade_stopsigns.xml') 

img_dict = {}

folder = "D:\\temp\\"
for imagesdir in os.listdir(folder):
    imgName = imagesdir
    img = cv2.imread(folder + imgName)

    signs = stopsign_classifier.detectMultiScale(img, scaleFactor= 1.01, minNeighbors = 9)

    #检查照片中是否存在停车标识
    if signs is ():
        print("No stop signs found")
    else:
        # 根据停车标识分类器的返回信息,在识别出的停车标识周围绘制框
        for (x, y, w, h) in signs:
            cv2.rectangle(img, (x,y), (x+w,y+h), (255, 255 , 255), 8)
            
    # 将处理后的图像存入字典,键为顺序整数
    img_dict[len(img_dict)] = img

注意:cv2.imread读取的图像是BGR格式,若你的展示代码未处理格式转换,需添加img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)适配Jupyter的RGB展示逻辑。

二、更简便的实现方式:用列表替代字典

因为顺序整数键和列表的索引完全对应,用列表存储会更高效、操作更简单,后续展示时也能通过索引直接访问,完全可以替代字典的作用:

  1. 初始化空列表:img_list = []
  2. 循环中添加图像:img_list.append(img)

修改后的完整代码:

import os
import cv2

stopsign_classifier = cv2.CascadeClassifier('haarcascade_stopsigns.xml') 

img_list = []  # 用列表替代字典

folder = "D:\\temp\\"
for imagesdir in os.listdir(folder):
    imgName = imagesdir
    img = cv2.imread(folder + imgName)

    signs = stopsign_classifier.detectMultiScale(img, scaleFactor= 1.01, minNeighbors = 9)

    #检查照片中是否存在停车标识
    if signs is ():
        print("No stop signs found")
    else:
        # 根据停车标识分类器的返回信息,在识别出的停车标识周围绘制框
        for (x, y, w, h) in signs:
            cv2.rectangle(img, (x,y), (x+w,y+h), (255, 255 , 255), 8)
            
    # 将处理后的图像添加到列表
    img_list.append(img)

如果必须适配原有字典展示代码,只需一行即可把列表转成符合要求的字典:

img_dict = dict(enumerate(img_list))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:55:22