我目前正在從事一個媒體項目。我們拍攝了很長的片段,如果不是黑色的話,主要是深色的。我已將這些剪輯分解為它們的幀(>500k 單幀)并將它們放在一些文件夾中?,F在,我的目標是找出并選擇那些不是黑色或主要是黑色的幀:總共大約有一千個。這似乎是一個簡單的 Python 腳本可以毫不費力地處理的工作。我知道 scikit-image 在處理圖像方面很常見,但不知道如何想出一個巧妙地完成這項工作的腳本。我有一些科學編程的經驗,但是圖像處理有點超出我的領域。例如,這個圖像應該被報告為黑色,因此被忽略,而另一個,雖然在低光下,應該保持良好狀態。理想情況下,最好有一個腳本使用一個或多個標準來確定圖像是否完全黑暗,在后一種情況下,將其放入另一個文件夾以供人工(我)檢查。非常感謝任何幫助!
3 回答

RISEBY
TA貢獻1856條經驗 獲得超5個贊
您可以非常簡單地獲得每個圖像的平均值,而無需使用適用于 Windows、Linux 和 macOS 的ImageMagick編寫任何代碼。
像這樣:
magick identify -format '%[fx:mean*255] %f\r\n' black.jpg 1.01936 black.jpg
和:
magick identify -format '%[fx:mean*255] %f\r\n' nonblack.jpg 1.72921 nonblack.jpg
為了提高性能,我會在 macOS 或 Linux 上使用GNU Parallel,但在 Windows 中,我會為每個目錄打開一個新的命令提示符并并行運行多個腳本,或者啟動一個腳本來處理所有以 0 或 1 結尾的文件,a第二個處理以 2 或 3 結尾的文件,第三個處理以 4,5 或 6 結尾的文件,最后一個處理以 7,8 或 9 結尾的文件。
順便說一句,如果我在 Python 中執行此操作,我會使用多處理池來加快速度。

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
正如回復中指出的那樣,對圖像進行“平均”處理會有所幫助。讀入圖像后,我計算np.mean(img, axis = 2).mean()
得到三個顏色通道的平均值。如果該平均值較低(<2),則丟棄圖像,否則將文件復制到另一個文件夾。
該代碼的時間效率并不高,因為 200k 文件需要大約 3 個小時,但確實有效!
添加回答
舉報
0/150
提交
取消