【问题标题】:How to open a random image from specified folder/directory in Python OpenCV如何在 Python OpenCV 中从指定文件夹/目录中打开随机图像
【发布时间】:2021-12-07 02:50:16
【问题描述】:

我希望我的程序从文件夹中打开一个随机图像。

这行得通:

import cv2
import os
import random

capture = cv2.imread(".Images/IMG_3225.JPEG")

但是当我想随机执行此操作时,它不起作用:

file = random.choice(os.listdir("./images/"))
capture = cv2.imread(file)

我收到以下错误:

cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

我做错了什么??

【问题讨论】:

  • file的值是多少?
  • 错误显示在imshow,而不是imread - 你确定打开文件是问题吗?也可能是您试图显示结果为 None 因为目录中的文件不是图像...

标签: python image opencv random cv2


【解决方案1】:

这是因为 os.listdir 返回文件夹的内容。

具有此文件夹结构:

images/
    - a.png
    - b.png
    - c.png

这将是预期的结果。

>>> os.listdir('images')
['a.png', 'b.png', 'c.png']

file 实际上包含images/ 中的文件名,因此cv2.imread 找不到该文件,因为它在错误的位置查找它。

你必须传递cv2.imread文件的路径:

IMAGE_FOLDER = './images'

filename = random.choice(os.listdir(IMAGE_FOLDER))
path = '%s/%s' % (IMAGE_FOLDER , filename)

capture = cv2.imread(path)

【讨论】:

    【解决方案2】:

    这是我们在处理它时通常会忽略的小错误之一。主要是因为os.listdir返回的是一个文件夹的内容。当您使用os.listdir 时,它只返回文件名。结果它像capture = cv2.imread("file_name.png") 一样运行,而它应该是capture = cv2.imread("path/file_name.png")

    所以在工作的时候,尽量使用代码sn-p:

    path = './images'
    file = random.choice(os.listdir("./images/"))
    capture = cv2.imread(os.path.join(path,file))
    
    

    这将帮助您运行代码。

    【讨论】:

    • 谢谢,这行得通!
    【解决方案3】:

    试试这个:

    import os
    import cv2
    import random
    
    
    dirs = []
    for i in os.listdir("images"):
        if i.endswith(".JPEG"):
            dirs.append(os.path.join("images", i))
    
    pic = random.choice(dirs)
    
    pic_name = pic.split("\\")[-1]
    pic = cv2.imread(pic)
    
    cv2.imshow(pic_name, pic)
    
    cv2.waitKey(0)
    

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 1970-01-01
      • 2013-03-18
      • 2019-06-04
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2021-01-31
      相关资源
      最近更新 更多