如何从 Python OpenCV 中的指定 folder/directory 打开随机图像
How to open a random image from specified folder/directory in 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'
我做错了什么??
试试这个:
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)
发生这种情况是因为 os.listdir
returns 文件夹的内容。
具有此文件夹结构:
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)
这是我们在处理它时通常会忽略的小错误之一。主要是因为os.listdir
returns一个文件夹的内容。当您使用 os.listdir
时,它只是 returns 文件名。结果是 运行ning 像 capture = cv2.imread("file_name.png")
而它应该是 capture = cv2.imread("path/file_name.png")
所以在工作的时候,尝试使用代码片段:
path = './images'
file = random.choice(os.listdir("./images/"))
capture = cv2.imread(os.path.join(path,file))
这将帮助您 运行 代码。
我希望我的程序从文件夹中随机打开一张图片。
这个有效:
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'
我做错了什么??
试试这个:
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)
发生这种情况是因为 os.listdir
returns 文件夹的内容。
具有此文件夹结构:
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)
这是我们在处理它时通常会忽略的小错误之一。主要是因为os.listdir
returns一个文件夹的内容。当您使用 os.listdir
时,它只是 returns 文件名。结果是 运行ning 像 capture = cv2.imread("file_name.png")
而它应该是 capture = cv2.imread("path/file_name.png")
所以在工作的时候,尝试使用代码片段:
path = './images'
file = random.choice(os.listdir("./images/"))
capture = cv2.imread(os.path.join(path,file))
这将帮助您 运行 代码。