python使用opencv批量截取視頻圖片
????在學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的中目標(biāo)檢測的小伙伴,可能經(jīng)常會需要從監(jiān)控錄像中截取視頻圖片,這里分想一個(gè)簡單好用的源碼,可以批量的從視頻中截取圖片,并且加入了簡單的進(jìn)度統(tǒng)計(jì)的功能。
????這里先分享一個(gè)初版的。
????以上代碼在多次使用中,已經(jīng)可以很好的實(shí)現(xiàn)截圖的功能,但是在使用過程中發(fā)現(xiàn)速度相對比較慢,因?yàn)闀σ曨l進(jìn)行播放,然后隔幾幀進(jìn)行取圖。如果我相隔的幀數(shù)過多,會造成無意義的播放。
????所以,通過上述的思路,我查了相關(guān)資料,得到了一個(gè)方法,我們可以通過這個(gè)total_frames = int(video.get(7))或者total_frames = int(video.get(CV2.CAP_PROP_FRAME_COUNT))的方法獲取到視頻的總幀數(shù),然后通過索引直接獲取指定間隔幀的方式,如video.set(CV2.CAP_PROP_POS_FRAMES, frame_index),可以大大減少視頻截圖程序的運(yùn)行時(shí)間。
????經(jīng)過測試發(fā)現(xiàn),對于一集時(shí)長為45分鐘的電視劇,按照125幀的間隔進(jìn)行截取,直接獲取指定幀所需的總耗時(shí)約為70秒。而使用正常播放并間隔保存的方式,所需時(shí)間則約為700秒,相差大約10倍。因此,通過這種方式,在間隔幀數(shù)較多的情況下,能夠有效地提升截圖效率。以下是源碼:
????