本文給大家介紹一類(lèi)從視頻里獲取視頻幀的辦法,因?yàn)閱魏双@取視頻幀速率比較慢,因而接下來(lái)我們?cè)鰪?qiáng)了線程同步的辦法,感興趣的朋友能夠出手試一試
Python迅速獲取視頻幀(線程同步)
現(xiàn)在詳細(xì)介紹一下一類(lèi)從視頻里獲取視頻幀的辦法,因?yàn)閱魏双@取視頻幀速率比較慢,因而接下來(lái)我們?cè)鰪?qiáng)了線程同步的辦法。
1、獲取視頻幀
獲取視頻幀關(guān)鍵用了Opencv控制模塊。
在其中:
camera=cv2.Videocapture(),函數(shù)公式主要通過(guò)啟用筆記本電腦內(nèi)置攝像頭載入視頻幀;
res,image=camera.read()函數(shù)公式通常是按幀載入短視頻,傳參“res”是布爾型,取得成功載入回到True,載入不成功回到False;
最終用cv2.imwrite()函數(shù)公式存放載入過(guò)的視頻幀。
視頻幀獲取方式可參考本文
import cv2 import os def video_to_frames(video_path,outPutDirName): times=0 #提取視頻的頻率,每1幀提取一個(gè) frame_frequency=1 #如果文件目錄不存在則創(chuàng)建目錄 if not os.path.exists(outPutDirName): os.makedirs(outPutDirName) #讀取視頻幀 camera=cv2.VideoCapture(video_path) while True: times=times+1 res,image=camera.read() if not res: print('not res,not image') break #按照設(shè)置間隔存儲(chǔ)視頻幀 if times%frame_frequency==0: cv2.imwrite(outPutDirName+''+str(times)+'.jpg',image) print('圖片提取結(jié)束') #釋放攝像頭設(shè)備 camera.release()
2、線程同步方式
線程同步的應(yīng)用關(guān)鍵應(yīng)用了threading庫(kù)。
在其中:
threading.Thread()函數(shù)公式主要是用于啟用線程同步,在其中主要參數(shù)“target”是上邊需要用到的函數(shù)公式,主要參數(shù)“args”是上邊函數(shù)的輸入數(shù)據(jù)。
在其中相關(guān)線程同步的詳細(xì)介紹一下,及其速率提高效果可參考本文
import threading threading.Thread(target=video_to_frames,args=(video_path,outPutDirName)).start()
留意
1、extract_frame方方法的入?yún)⒎謩e是:鍵入視頻地址、導(dǎo)出視頻地址、短視頻fps、視頻尺寸寬、視頻尺寸高、短視頻必須抽走的起點(diǎn)幀、短視頻必須抽走的完畢幀。
3、整體代碼
import cv2 import os import threading def video_to_frames(video_path,outPutDirName): times=0 #提取視頻的頻率,每1幀提取一個(gè) frame_frequency=1 #如果文件目錄不存在則創(chuàng)建目錄 if not os.path.exists(outPutDirName): os.makedirs(outPutDirName) #讀取視頻幀 camera=cv2.VideoCapture(video_path) while True: times=times+1 res,image=camera.read() if not res: print('not res,not image') break if times%frame_frequency==0: cv2.imwrite(outPutDirName+''+str(times)+'.jpg',image) print('圖片提取結(jié)束') camera.release() if __name__=="__main__": input_dir=r'D:datasetscow_dataset'#輸入的video文件夾位置 save_dir=r'E:relate_codedataset'#輸出圖片到當(dāng)前目錄video文件夾下 count=0#視頻數(shù) for video_name in os.listdir(input_dir): video_path=os.path.join(input_dir,video_name) outPutDirName=os.path.join(save_dir,video_name[:-4]) threading.Thread(target=video_to_frames,args=(video_path,outPutDirName)).start() count=count+1 print("%s th video has been finished!"%count)
補(bǔ)充
還可以利用Python實(shí)現(xiàn)抽取剔除視頻幀工具
代碼
下面是使用opencv對(duì)視頻中間幾幀抽取的方法。
主要的思路是在讀取frame的時(shí)候,順便把幀寫(xiě)下來(lái)。
同時(shí)如果不是需要抽取剔除的幀,直接continue到下個(gè)循環(huán)。
樣例代碼如下,主要按照MP4格式進(jìn)行處理。
#!/user/bin/env python #coding=utf-8 """ project:csdn-pro author:劍客阿良_ALiang file:test.py ide:PyCharm time:2022-06-30 17:55:48 """ import cv2 #視頻抽幀 def extract_frame(video_path:str,result_path:str,fps,weight,height,start,end): fourcc=cv2.VideoWriter_fourcc(*'mp4v') videoWriter=cv2.VideoWriter(result_path,fourcc,fps,(weight,height)) vc=cv2.VideoCapture(video_path) if vc.isOpened(): ret,frame=vc.read() else: ret=False count=0#count the number of pictures while ret: ret,frame=vc.read() if start<=count<=end: count+=1 continue else: videoWriter.write(frame) count+=1 print(count) videoWriter.release() vc.release() if __name__=='__main__': extract_frame('C:UsersxxxDesktop123.mp4','C:UsersxxxDesktop114.mp4',25,640,368,119,125)
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128691.html
摘要:將圖片的處理方法放到視頻中的每一幀,再加上彈幕飛過(guò)的效果,就完成了版的智能防擋彈幕。不知道站的實(shí)現(xiàn)方法是怎樣,是否有人工干預(yù),是否有預(yù)計(jì)算。 某天代碼寫(xiě)得老眼昏花,去B站上摸魚(yú),突然發(fā)現(xiàn)奇怪的現(xiàn)象: showImg(https://segmentfault.com/img/remote/1460000017911829?w=600&h=284); 喲呵,B站竟然做了 視頻前景提取 ,把...
摘要:這次開(kāi)始學(xué)習(xí)從攝像頭獲取視頻使用獲取視頻要獲取視頻,需要?jiǎng)?chuàng)建一個(gè)對(duì)象,參數(shù)可以是設(shè)備索引攝像頭索引或視頻文件的名稱(chēng)。 這次開(kāi)始學(xué)習(xí)Getting Started with Videos 1從攝像頭獲取視頻 使用cv2.VideoCapture()獲取視頻. cv2.VideoCapture(builtins.object) 要獲取視頻,需要?jiǎng)?chuàng)建一個(gè)VideoCapture對(duì)象,參數(shù)可以...
摘要:通過(guò)利用一系列利用視頻局部性的優(yōu)化,顯著降低了在每個(gè)幀上的計(jì)算量,同時(shí)仍保持常規(guī)檢索的高精度。的差異檢測(cè)器目前是使用逐幀計(jì)算的邏輯回歸模型實(shí)現(xiàn)的。這些檢測(cè)器在上的運(yùn)行速度非??欤棵氤^(guò)萬(wàn)幀。也就是說(shuō),每秒處理的視頻幀數(shù)超過(guò)幀。 視頻數(shù)據(jù)正在爆炸性地增長(zhǎng)——僅英國(guó)就有超過(guò)400萬(wàn)個(gè)CCTV監(jiān)控?cái)z像頭,用戶(hù)每分鐘上傳到 YouTube 上的視頻超過(guò)300小時(shí)。深度學(xué)習(xí)的進(jìn)展已經(jīng)能夠自動(dòng)分析這些...
摘要:摘要本文介紹使用和完成視頻流目標(biāo)檢測(cè),代碼解釋詳細(xì),附源碼,上手快。將應(yīng)用于視頻流對(duì)象檢測(cè)首先打開(kāi)文件并插入以下代碼同樣,首先從導(dǎo)入相關(guān)數(shù)據(jù)包和命令行參數(shù)開(kāi)始。 摘要:?本文介紹使用opencv和yolo完成視頻流目標(biāo)檢測(cè),代碼解釋詳細(xì),附源碼,上手快。 在上一節(jié)內(nèi)容中,介紹了如何將YOLO應(yīng)用于圖像目標(biāo)檢測(cè)中,那么在學(xué)會(huì)檢測(cè)單張圖像后,我們也可以利用YOLO算法實(shí)現(xiàn)視頻流中的目標(biāo)檢...
摘要:身為一名前業(yè)務(wù)程序員和現(xiàn)前端程序員,這樣的功能還是陌生的領(lǐng)域。需求使用加攝像頭,通過(guò)人臉檢測(cè),完成自動(dòng)拍照功能。在的屏幕上,顯示攝像頭的實(shí)時(shí)畫(huà)面,要是畫(huà)面中檢測(cè)出人臉,則觸發(fā)拍照。這樣做的效果能夠獲得更高的,同時(shí)還能完成更遠(yuǎn)距離臉部的捕獲。 因?yàn)轫?xiàng)目原因,需要使用人臉檢測(cè)(face detection)功能。身為一名前JAVA業(yè)務(wù)程序員和現(xiàn)前端程序員,這樣的功能還是陌生的領(lǐng)域。那能不能...
閱讀 923·2023-01-14 11:38
閱讀 895·2023-01-14 11:04
閱讀 756·2023-01-14 10:48
閱讀 2055·2023-01-14 10:34
閱讀 961·2023-01-14 10:24
閱讀 840·2023-01-14 10:18
閱讀 510·2023-01-14 10:09
閱讀 588·2023-01-14 10:02