本文給大家介紹一類從視頻里獲取視頻幀的辦法,因為單核獲取視頻幀速率比較慢,因而接下來我們增強了線程同步的辦法,感興趣的朋友能夠出手試一試
Python迅速獲取視頻幀(線程同步)
現(xiàn)在詳細介紹一下一類從視頻里獲取視頻幀的辦法,因為單核獲取視頻幀速率比較慢,因而接下來我們增強了線程同步的辦法。
1、獲取視頻幀
獲取視頻幀關(guān)鍵用了Opencv控制模塊。
在其中:
camera=cv2.Videocapture(),函數(shù)公式主要通過啟用筆記本電腦內(nèi)置攝像頭載入視頻幀;
res,image=camera.read()函數(shù)公式通常是按幀載入短視頻,傳參“res”是布爾型,取得成功載入回到True,載入不成功回到False;
最終用cv2.imwrite()函數(shù)公式存放載入過的視頻幀。
視頻幀獲取方式可參考本文
import cv2 import os def video_to_frames(video_path,outPutDirName): times=0 #提取視頻的頻率,每1幀提取一個 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è)置間隔存儲視頻幀 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庫。
在其中:
threading.Thread()函數(shù)公式主要是用于啟用線程同步,在其中主要參數(shù)“target”是上邊需要用到的函數(shù)公式,主要參數(shù)“args”是上邊函數(shù)的輸入數(shù)據(jù)。
在其中相關(guān)線程同步的詳細介紹一下,及其速率提高效果可參考本文
import threading threading.Thread(target=video_to_frames,args=(video_path,outPutDirName)).start()
留意
1、extract_frame方方法的入?yún)⒎謩e是:鍵入視頻地址、導(dǎo)出視頻地址、短視頻fps、視頻尺寸寬、視頻尺寸高、短視頻必須抽走的起點幀、短視頻必須抽走的完畢幀。
3、整體代碼
import cv2 import os import threading def video_to_frames(video_path,outPutDirName): times=0 #提取視頻的頻率,每1幀提取一個 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)
補充
還可以利用Python實現(xiàn)抽取剔除視頻幀工具
代碼
下面是使用opencv對視頻中間幾幀抽取的方法。
主要的思路是在讀取frame的時候,順便把幀寫下來。
同時如果不是需要抽取剔除的幀,直接continue到下個循環(huán)。
樣例代碼如下,主要按照MP4格式進行處理。
#!/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ī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/128691.html
摘要:將圖片的處理方法放到視頻中的每一幀,再加上彈幕飛過的效果,就完成了版的智能防擋彈幕。不知道站的實現(xiàn)方法是怎樣,是否有人工干預(yù),是否有預(yù)計算。 某天代碼寫得老眼昏花,去B站上摸魚,突然發(fā)現(xiàn)奇怪的現(xiàn)象: showImg(https://segmentfault.com/img/remote/1460000017911829?w=600&h=284); 喲呵,B站竟然做了 視頻前景提取 ,把...
摘要:這次開始學(xué)習(xí)從攝像頭獲取視頻使用獲取視頻要獲取視頻,需要創(chuàng)建一個對象,參數(shù)可以是設(shè)備索引攝像頭索引或視頻文件的名稱。 這次開始學(xué)習(xí)Getting Started with Videos 1從攝像頭獲取視頻 使用cv2.VideoCapture()獲取視頻. cv2.VideoCapture(builtins.object) 要獲取視頻,需要創(chuàng)建一個VideoCapture對象,參數(shù)可以...
摘要:通過利用一系列利用視頻局部性的優(yōu)化,顯著降低了在每個幀上的計算量,同時仍保持常規(guī)檢索的高精度。的差異檢測器目前是使用逐幀計算的邏輯回歸模型實現(xiàn)的。這些檢測器在上的運行速度非常快,每秒超過萬幀。也就是說,每秒處理的視頻幀數(shù)超過幀。 視頻數(shù)據(jù)正在爆炸性地增長——僅英國就有超過400萬個CCTV監(jiān)控攝像頭,用戶每分鐘上傳到 YouTube 上的視頻超過300小時。深度學(xué)習(xí)的進展已經(jīng)能夠自動分析這些...
摘要:摘要本文介紹使用和完成視頻流目標(biāo)檢測,代碼解釋詳細,附源碼,上手快。將應(yīng)用于視頻流對象檢測首先打開文件并插入以下代碼同樣,首先從導(dǎo)入相關(guān)數(shù)據(jù)包和命令行參數(shù)開始。 摘要:?本文介紹使用opencv和yolo完成視頻流目標(biāo)檢測,代碼解釋詳細,附源碼,上手快。 在上一節(jié)內(nèi)容中,介紹了如何將YOLO應(yīng)用于圖像目標(biāo)檢測中,那么在學(xué)會檢測單張圖像后,我們也可以利用YOLO算法實現(xiàn)視頻流中的目標(biāo)檢...
摘要:身為一名前業(yè)務(wù)程序員和現(xiàn)前端程序員,這樣的功能還是陌生的領(lǐng)域。需求使用加攝像頭,通過人臉檢測,完成自動拍照功能。在的屏幕上,顯示攝像頭的實時畫面,要是畫面中檢測出人臉,則觸發(fā)拍照。這樣做的效果能夠獲得更高的,同時還能完成更遠距離臉部的捕獲。 因為項目原因,需要使用人臉檢測(face detection)功能。身為一名前JAVA業(yè)務(wù)程序員和現(xiàn)前端程序員,這樣的功能還是陌生的領(lǐng)域。那能不能...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1982·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02