python+opencv實現(xiàn)視頻抽幀示例代碼
雖然有主流龐大的COCO、VOC數(shù)據(jù)集,但是科研人員仍需要特殊領(lǐng)域要求的數(shù)據(jù)集,所以采用人工實地采集的方式進(jìn)行收集數(shù)據(jù)集圖像;通過拍照收集圖像過于繁瑣,所以通常是將攝像頭無規(guī)則的移動旋轉(zhuǎn)以及遠(yuǎn)近拉縮,進(jìn)而錄制視頻;再通過視頻抽幀的方式得到大量的圖像,再將這些圖像進(jìn)行人工標(biāo)注處理。
博主通過一個水下錄制視頻為例子,當(dāng)這類圖像在網(wǎng)上鮮有存在時,要求有關(guān)技術(shù)人員進(jìn)行實拍采集,下圖即為采集得到的視頻。
為了避免不符合項目要求的數(shù)據(jù)增強(qiáng),博主要求技術(shù)人員在錄制視頻時最大程度地讓攝像頭進(jìn)行移動、旋轉(zhuǎn)以及遠(yuǎn)近調(diào)節(jié)等;這樣抽幀后的圖像更具有泛化性。
2、代碼介紹:下面是采用以幀數(shù)為間隔的方法進(jìn)行視頻抽幀,博主個人認(rèn)為這樣子的方式調(diào)節(jié)間隔更加方便,更符合個人習(xí)慣。
import cv2from PIL import Imageimport numpy as npcap = cv2.VideoCapture('D:/Download/ANMR0005.mp4') # 獲取視頻對象isOpened = cap.isOpened # 判斷是否打開# 視頻信息獲取fps = cap.get(cv2.CAP_PROP_FPS)imageNum = 0sum=0timef=15 #隔15幀保存一張圖片while (isOpened): sum+=1 (frameState, frame) = cap.read() # 記錄每幀及獲取狀態(tài) if frameState == True and (sum % timef==0):# 格式轉(zhuǎn)變,BGRtoRGBframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 轉(zhuǎn)變成Imageframe = Image.fromarray(np.uint8(frame))frame = np.array(frame)# RGBtoBGR滿足opencv顯示格式frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)imageNum = imageNum + 1fileName = ’D:/Download/video_image/image’ + str(imageNum) + ’.jpg’ # 存儲路徑cv2.imwrite(fileName, frame, [cv2.IMWRITE_JPEG_QUALITY, 100])print(fileName + ' successfully write in') # 輸出存儲狀態(tài) elif frameState == False:breakprint(’finish!’)cap.release()3、代碼效果:
pycharm運行py文件后結(jié)果框顯示的內(nèi)容:
視頻抽幀得到的圖像保存至指定的文件夾:
抽幀得到的圖片示例:
4、相關(guān)說明: ①本代碼依據(jù)錄制視頻、對opencv的理解以及大佬的項目代碼靈感進(jìn)行編寫;
大佬的項目代碼地址
②本數(shù)據(jù)集屬于私人閉源,不公開。
到此這篇關(guān)于python+opencv實現(xiàn)視頻抽幀的文章就介紹到這了,更多相關(guān)python opencv視頻抽幀內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 用xslt+css讓RSS顯示的跟網(wǎng)頁一樣漂亮2. ASP.NET MVC把數(shù)據(jù)庫中枚舉項的數(shù)字轉(zhuǎn)換成文字3. 《CSS3實戰(zhàn)》筆記--漸變設(shè)計(一)4. 測試模式 - XSL教程 - 55. Ajax實現(xiàn)異步加載數(shù)據(jù)6. 教你JS更簡單的獲取表單中數(shù)據(jù)(formdata)7. ASP.NET Core自定義中間件的方式詳解8. html5手機(jī)觸屏touch事件介紹9. CSS3實現(xiàn)動態(tài)翻牌效果 仿百度貼吧3D翻牌一次動畫特效10. 讓chatgpt將html中的圖片轉(zhuǎn)為base64方法示例
