视频到图片(每隔几帧保存一张图片)opencv实现
生活随笔
收集整理的這篇文章主要介紹了
视频到图片(每隔几帧保存一张图片)opencv实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果想要自動截取一個視頻的圖片,又不想手動暫停截取,那可以試試用opencv自動截取(比如想要自動截取喜歡電影的經典臺詞與圖片)。
背景說明:一個小意外,錄屏視頻沒有聲音,想著把視頻里的PPT截取出來,1個小時的視頻,自己挨個截取太慢了,靈機一動用opencv試試吧。
問題1:剛開始代碼將每幀都進行了截取,發現一共42798幀,太多了,而且截取圖片有很多重復的。
解決:隔幀截取保存,隔多少,暫時是默認了80,效果不錯(可以根據自己的視頻以及效果改動)。(代碼如下)
問題2:能不能讓代碼自己根據圖片差異判斷保存?只留下變化的圖片,
解決:解決見第二個程序。程序最核心的代碼? skimage.measure.compare_ssim(X,Y,...) ?計算兩幅圖像之間的平均結構相似性指數,可參考我的另一個博客https://mp.csdn.net/console/editor/html/109428505
注意:
- 想要嘗試代碼,配置opencv,pip install -i https://mirrors.aliyun.com/pypi/simple opencv-python==4.1.0.25
詳情見:https://blog.csdn.net/dujuancao11/article/details/107468687 - cap = cv2.VideoCapture('2.mp4')??2.mp4改為你的視頻名字
- 以下代碼只嘗試了MP4類型文件,別的暫時沒有嘗試,有需要再來更新改進吧。
代碼運行結果?
import os import cv2 from skimage.measure import compare_ssim '''相鄰兩個文件比較相似度,相似就把第二個加到新列表(刪除列表)里,然后進行新列表去重,統一刪除。例如:有文件1-10,首先1和2相比較,若相似,則把2加入到新列表里,再接著2和3相比較,若不相似,則繼續進行3和4比較...一直比到最后,然后刪除新列表里的圖片只對于連續圖片(例一個視頻里截下的圖片)準確率也較高,其效率高''' def delete(filename1):os.remove(filename1) if __name__ == '__main__':path = r'./E/' # 文件所在路徑img_path = pathimgs_n = [] # 新建的刪除列表i = 0 # 用來統計刪了第幾張圖片img_files = [os.path.join(rootdir, file) for rootdir, _, files in os.walk(path) for file in files if(file.endswith('.jpg'))]for currIndex, filename in enumerate(img_files):if not os.path.exists(img_files[currIndex]):print('not exist', img_files[currIndex])breakimg = cv2.imread(img_files[currIndex])img1 = cv2.imread(img_files[currIndex + 1])# https://cloud.tencent.com/developer/section/1414961 開發者手冊鏈接# 本程序最核心的代碼# skimage.measure.compare_ssim(X,Y,...)# 計算兩幅圖像之間的平均結構相似性指數ssim = compare_ssim(img, img1, multichannel=True)# 相似度大于0.9就加入刪除列表if ssim > 0.9:imgs_n.append(img_files[currIndex + 1]) # 加入新建刪除列表i = i+1 # 每加入一個就會刪除print(img_files[currIndex], img_files[currIndex + 1], ssim)print('刪除次數', i)# 否則不刪除,給出兩圖片的相似度else:print('small_ssim',img_files[currIndex], img_files[currIndex + 1], ssim)currIndex += 1if currIndex >= len(img_files)-1:breakfor image in imgs_n:delete(image)- 運行結果
?可發現共刪除294張圖片
處理前文件夾情況(共403):
?
?
處理后文件夾情況(剩下109)點開檢查發現相似圖片基本刪除,達到目標:
總結
以上是生活随笔為你收集整理的视频到图片(每隔几帧保存一张图片)opencv实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 告女孩书
- 下一篇: 大数据、云计算、元宇宙——吉吉拍的探索之