欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?OpenCV視頻文件相關(guān)操作教程

 更新時(shí)間:2022年11月10日 10:39:12   作者:In?my?opinion  
最近看了一些opencv的相關(guān)內(nèi)容,這里做一下記錄以及學(xué)習(xí)中的體會(huì),和大家分享一下,下面這篇文章主要給大家介紹了關(guān)于Python?OpenCV視頻文件相關(guān)操作的相關(guān)資料,需要的朋友可以參考下

一、從文件中讀取視頻并播放

1.創(chuàng)建讀取視頻的對象

cap=cv.VideoCapture(filepath)

2.獲取視頻某些屬性

retval=cap.get(propId)

propId:從0到18的數(shù)字,每個(gè)數(shù)字表示視頻的屬性

索引flags意義
0cv2.CAP_ PROP_POS_MSEC視頻文件當(dāng)前位置
1cv2.CAP_PROP_POS_FRAMES從0開始索引幀,幀位置
2cv2.CAP_PROP_POS_AVI_RATIO視頻文件的相對位置(0表示開始,1表示結(jié)束)
3cv2.CAP_PROP_FRAME_WIDTH視頻流的幀寬度
4cv2.CAP_PROP_FRAME_HEIGHT視頻流的幀高度
5cv2.CAP_PROP_FPS幀率
6cv2.CAP_PROP_FOURCC編解碼器四字符代碼
7cv2.CAP_PROP_FRAME_COUNT視頻文件的幀

3.修改視頻屬性信息

cap.set(propId,value)

4.判斷圖像是否讀取成功

isornot=cap.isOpened()

5.獲取視頻的一幀圖像

ret,frame=cap.read()

ret:獲取成功返回True,失敗返回False

frame:獲取到的圖像

注意:調(diào)用cv.imshow()顯示圖像時(shí),要使用cv.waitkey()設(shè)置適當(dāng)持續(xù)時(shí)間,通常設(shè)置25ms

6.釋放圖像

cap.release()

示例:

import numpy as np
import cv2 as cv
cap=cv.VideoCapture("video.mp4")
#判斷是否獲取成功
while(cap.isOpened()):
    #獲取每一幀圖像
    ret,frame=cap.read()
    #是否獲取成功
    if ret == True:
        cv.imshow("frame",frame)
    if cv.waitKey(25)&0xFF==ord("q"):
        break;
cap.release()
cv.destoryAllWindows()

 二、視頻文件的保存

1.在OpenCV中保存視頻使用的是VedioWriter對象,創(chuàng)建視頻寫入對象

out=cv.VideoWriter(filename,fourcc,fps,framesize)

fourcc:用四個(gè)字符表示的視頻編碼格式

fps:幀速率

framesize:每一幀的大小

2.設(shè)置視頻的編解碼器

retval=cv2.VideoWriter_fourcc(c1,c2,c3,c4)

c1~c4:視頻編解碼器的4字節(jié)代碼,常用的有:

Windows:DIVX(.avi)

OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)

3.利用cap.read()獲取視頻中的每一幀圖像,使用out.write()將某一幀圖像寫入視頻中

4.使用cap.release()和out.release()釋放資源

示例

import numpy as np
import cv2 as cv
#讀取視頻
cap=cv.VideoCapture("video.mp4")
width=int(cap.get(3))
height=int(cap.get(4))
out=cv.VideoWriter("out.avi",cv.VideoWriter_fourcc("M","J","P","G"),10,(width,height))
while(True):
    ret,frame=cap.read()
    if ret==True:
        out.write(frame)
    else:
        break
cap.release()
out.release()
cv.destroyAllWindows()

 三、視頻文件目標(biāo)追蹤

1.meanshift算法:

1>原理:通常情況,使用直方圖反向投影方法將窗口移動(dòng)到反向投影圖像中灰度密度最大的區(qū)域

假設(shè)我們有張100x100的輸入圖像,有一張10x10的模板圖像, 查找的過程:
1.從輸入圖像的左上角(0,0)開始,切割一塊(0,0)至(10,10)的臨時(shí)圖像

2.生成臨時(shí)圖像的直方圖
3.用臨時(shí)圖像的直方圖和模板圖像的直方圖對比,對比結(jié)果記為c
4.直方圖對比結(jié)果c,就是結(jié)果圖像(0,0)處的像素值
5.切割輸入圖像從(0,1)至(10,11)的臨時(shí)圖像,對比直方圖,并記錄到結(jié)果圖像

6.重復(fù)1~5步直到輸入圖像的右下角,就形成了直方圖的反向投影

2>API

cv.meanshift(probImage,window,criteria)

probImage:ROI區(qū)域,即直方圖的反向投影

window:初始搜索窗口,即定義ROI的rect

criteria:確定窗口搜索停止的準(zhǔn)則,主要有迭代次數(shù)達(dá)到設(shè)置的最大值,窗口中心漂移值大于某個(gè)設(shè)定的限值

3>主要流程

1.讀取視頻文件: cv.VideoCapture0
2.感興趣區(qū)域設(shè)置:獲取第一幀圖像,并設(shè)置目標(biāo)區(qū)域,即感興趣區(qū)域
3.計(jì)算直方圖:計(jì)算感興趣區(qū)域的HSV直方圖,并進(jìn)行歸一化
4.目標(biāo)追蹤:設(shè)置窗口搜索停止條件,直方圖反向投影,進(jìn)行目標(biāo)追蹤,并在目標(biāo)位置繪制矩形框。

示例

import numpy as np
import cv2 as cv
# 1.獲取圖像
cap=cv.VideoCapture('video.mp4')
#指定追蹤目標(biāo)
ret,frame=cap.read()
#行、高、列、寬
r,h,c,w=347, 301, 700, 308
win=(c,r,w,h)#追蹤窗口為列行寬高
#追蹤目標(biāo)
roi = frame[r:r + h, c:c + w]
#計(jì)算直方圖(HSV)
hsv_roi=cv.cvtColor(roi, cv.COLOR_BGR2HSV)
roi_hist=cv.calcHist([hsv_roi], [0], None, [180], [0, 180])
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
# 4. 目標(biāo)追蹤,設(shè)置窗口搜索終止條件:最大迭代次數(shù),窗口中心漂移最小值
term=(cv.TERM_CRITERIA_EPS|cv.TERM_CRITERIA_COUNT, 10, 1)
while (True):
    ret, frame=cap.read()
    if ret == True:
        #計(jì)算直方圖的反向投影
        hsv=cv.cvtColor(frame, cv.COLOR_BGR2HSV)
        dst=cv.calcBackProject([hsv],[0],roi_hist,[0, 180],1)
        #進(jìn)行meanshift追蹤
        ret,win = cv.meanShift(dst,win,term)
        #追蹤的位置繪制在視頻上
        x,y,w,h=win
        img2 = cv.rectangle(frame, (x,y), (x+w, y+h), 255, 2)
        cv.imshow('frame',img2)
        if cv.waitKey(60) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
cv.destroyAllWindows()

總結(jié) 

到此這篇關(guān)于Python OpenCV視頻文件相關(guān)操作的文章就介紹到這了,更多相關(guān)OpenCV視頻文件操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VsCode終端激活anconda環(huán)境問題解決

    VsCode終端激活anconda環(huán)境問題解決

    本文主要介紹了VsCode終端激活anconda環(huán)境問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Flask處理POST請求的教程指南

    Flask處理POST請求的教程指南

    Flask處理POST請求的過程是一個(gè)相對直接且靈活的過程,它允許開發(fā)者根據(jù)需求接收、處理并響應(yīng)客戶端發(fā)送的數(shù)據(jù),以下是對Flask如何處理POST請求的詳細(xì)簡述,需要的朋友可以參考下
    2024-10-10
  • pyCharm 實(shí)現(xiàn)關(guān)閉代碼檢查

    pyCharm 實(shí)現(xiàn)關(guān)閉代碼檢查

    這篇文章主要介紹了pyCharm 實(shí)現(xiàn)關(guān)閉代碼檢查,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 利用Python實(shí)現(xiàn)數(shù)值積分的方法

    利用Python實(shí)現(xiàn)數(shù)值積分的方法

    這篇文章主要介紹了利用Python實(shí)現(xiàn)數(shù)值積分。本文主要用于對比使用Python來實(shí)現(xiàn)數(shù)學(xué)中積分的幾種計(jì)算方式,并和真值進(jìn)行對比,加深大家對積分運(yùn)算實(shí)現(xiàn)方式的理解
    2022-02-02
  • 關(guān)于flask路由app.route及路由參數(shù)的各種用法解析

    關(guān)于flask路由app.route及路由參數(shù)的各種用法解析

    我們在開發(fā)過程中,編寫項(xiàng)目時(shí)所使用的路由往往是指代了框架/項(xiàng)目中用于完成路由功能的類,這個(gè)類一般就是路由類,簡稱路由,這篇文章主要介紹了有關(guān)flask路由app.route及路由參數(shù)的各種用法解析,需要的朋友可以參考下
    2024-03-03
  • 最新評論