我希望我的程式從檔案夾中打開一個隨機影像。
這有效:
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'
我究竟做錯了什么??
uj5u.com熱心網友回復:
發生這種情況是因為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)
uj5u.com熱心網友回復:
嘗試這個:
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)
uj5u.com熱心網友回復:
這是我們在處理它時通常會忽略的小錯誤之一。主要是因為os.listdir回傳檔案夾的內容。當您使用時os.listdir,它只回傳檔案名。結果它運行得像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))
這將幫助您運行代碼。
uj5u.com熱心網友回復:
嘗試這個:
import random , glob, cv2
images = glob.glob(random.choice("./images/*.jpg"))
img = cv2.imread(images)
cv2.imshow(pic_name, img)
cv2.waitKey(0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/327241.html
