python - 如何在 Python OpenCV 中从指定文件夹/目录中打开随机图像
问题描述
我希望我的程序从文件夹中打开一个随机图像。
这有效:
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'
我究竟做错了什么??
解决方案
发生这种情况是因为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)
推荐阅读
- android - 不能直接在xml中使用方法
- python - AttributeError:(“'str'对象没有属性'contains'”,'发生在索引持续时间')
- c# - Set-cookie 不适用于 Dot net Core 3.1 中的跨站点请求/响应和 React 设置同站点 cookie 和/或 CORS 问题
- java - Spring - yaml 和 .properties 配置
- node.js - Nodejs本地依赖项在构建时不起作用
- javascript - WordPress Rest API:按自定义字段值过滤帖子
- android - 从 Firestore 中获取子集合作为对象列表
- c# - 来自特定语言键盘的所有可能输入字符的列表,包括死键字符
- html - 如何在 YouTube 等 HTML 视频的左上角添加标题
- flutter - Flutter:如何自动清除我的 TextFields?