我有一個根檔案夾,其中包含多個檔案夾,其中一些檔案夾內有 png,有些檔案夾內有子檔案夾,而 png 內有。
我的代碼:
import os
import cv2
root = r'C:\Users\sboroghina\Documents\_projects\json_compare'
for videopath, videodirs, videofiles in os.walk(root, topdown=False):
for videoname in videodirs:
if len(videoname) > 40:
video_name = str(videoname) '.avi'
for path, dirs, files in os.walk(root, topdown=False):
image_folder = path
images = [f for f in os.listdir(image_folder) if f.endswith('.png')]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, 0, 30, (width, height))
for image in images:
video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows()
video.release()
我收到此錯誤:
Traceback (most recent call last):
File "C:\Users\sboroghina\Documents\_projects\generate_annotation_images\test2.py", line 20, in <module>
frame = cv2.imread(os.path.join(image_folder, images[0]))
IndexError: list index out of range
我不明白為什么它會給我這個錯誤。
uj5u.com熱心網友回復:
您images像這樣定義了變數:
images = [f for f in os.listdir(image_folder) if f.endswith('.png')]
之后,沒有任何驗證,你做了:
images[0]
現在,對于images空串列的情況,這可能會導致問題,這意味著列出的檔案中沒有os.listdir(image_folder)一個以".png'.
只需更改此代碼塊:
for path, dirs, files in os.walk(root, topdown=False):
image_folder = path
images = [f for f in os.listdir(image_folder) if f.endswith('.png')]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, 0, 30, (width, height))
for image in images:
video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows()
video.release()
到:
for path, dirs, files in os.walk(root, topdown=False):
image_folder = path
images = [f for f in os.listdir(image_folder) if f.endswith('.png')]
if images: # Validation
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
video = cv2.VideoWriter(video_name, 0, 30, (width, height))
for image in images:
video.write(cv2.imread(os.path.join(image_folder, image)))
cv2.destroyAllWindows() # Unindented
video.release()
請注意,我還一次取消了這些行的縮進:
cv2.destroyAllWindows()
video.release()
以便VideoWriter在寫入所有幀之前不會釋放物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/367621.html
上一篇:例外值:加載libasound.so.2失敗:libasound.so.2:無法打開共享物件檔案:沒有這樣的檔案或目錄(Django/heroku)
下一篇:在HSV影像的值部分檢測紅色
