我是影像處理的新手,我從視頻中捕獲了幀,我想將它們轉換成陣列。這些幀必須是連續的。這是我的代碼的一部分
folder = "/content/otherGrayscaleImage"
onlyfiles = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))]
print("Working with {0} images".format(len(onlyfiles)))
for i in range(len(onlyfiles)):
#do something
print(onlyfiles[i])
這是輸出
Working with 328 images
241.png
312.png
27.png
149.png
42.png
296.png
182.png
99.png
64.png
120.png
102.png
208.png
79.png
325.png
......
如您所見,我的輸出列印是隨機的,并且不是從我的第一張影像1.png開始的。
這是使用 .sorted() 函式排序的輸入。
1.png
10.png
100.png
101.png
.
.
199.png
2.png
我的最終目標是將 64 個連續的 2d 影像陣列轉換為 3d 陣列,以實作 python 應該連續讀取我的影像;但事實并非如此。
我應該如何連續讀取檔案中的影像?
PS:使用諸如 sorted() 之類的排序函式無濟于事
uj5u.com熱心網友回復:
您需要一個自定義排序鍵。手動解決方案是這樣的:
onlyfiles.sort(key=lambda x: int(x[:x.index('.')]))
這不是一個穩健的解決方案。如果您有任何檔案在擴展名之前包含除整數以外的任何內容,或者缺少擴展名,這將引發錯誤。
幸運的是,有一個名為natsort的庫可以很好地捕捉到人工排序的極端情況。之后pip install natsort,你可以做
from natsort import natsorted
onlyfiles = natsorted(onlyfiles)
強制性免責宣告:我不隸屬于 natsort,除非是一個滿意的用戶。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417526.html
標籤:
下一篇:使用CV_8SC3、CV_16FC3、CV_16FC1時,我應該在cv::Mat.at<data_type>中使用什么資料型別?
