簡體   English   中英

在 python-opencv 中獲取視頻尺寸

[英]Get video dimension in python-opencv

我可以得到圖像的大小,如下所示:

import cv2

img = cv2.imread('my_image.jpg',0)
height, width = img.shape[:2]

視頻呢?

它以float給出文件或相機的widthheight (因此您可能必須轉換為integer

但它總是給我0.0 FPS

import cv2

vcap = cv2.VideoCapture('video.avi') # 0=camera
 
if vcap.isOpened(): 
    # get vcap property 
    width  = vcap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)   # float `width`
    height = vcap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)  # float `height`
    # or
    width  = vcap.get(3)  # float `width`
    height = vcap.get(4)  # float `height`

    # it gives me 0.0 :/
    fps = vcap.get(cv2.cv.CV_CAP_PROP_FPS)

似乎它可以工作fps = vcap.get(7)但我只檢查了一個文件。


編輯 2019:目前cv2使用的名稱略有不同

cv2.CAP_PROP_FRAME_WIDTH   # 3
cv2.CAP_PROP_FRAME_HEIGHT  # 4

cv2.CAP_PROP_FPS           # 5
cv2.CAP_PROP_FRAME_COUNT   # 7

但它們具有相同的值: 3457

import cv2

#vcap = cv2.VideoCapture(0)  # built-in webcamera

vcap = cv2.VideoCapture('video.avi')

if vcap.isOpened(): 
    width  = vcap.get(cv2.CAP_PROP_FRAME_WIDTH)   # float `width`
    height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # float `height`
    # or
    width  = vcap.get(3)  # float `width`
    height = vcap.get(4)  # float `height`

    print('width, height:', width, height)
    
    fps = vcap.get(cv2.CAP_PROP_FPS)
    # or
    fps = vcap.get(5)
    
    print('fps:', fps)  # float `fps`
    
    frame_count = vcap.get(cv2.CAP_PROP_FRAME_COUNT)
    # or
    frame_count = vcap.get(7)
    
    print('frames count:', frame_count)  # float `frame_count`

    #print('cv2.CAP_PROP_FRAME_WIDTH :', cv2.CAP_PROP_FRAME_WIDTH)   # 3
    #print('cv2.CAP_PROP_FRAME_HEIGHT:', cv2.CAP_PROP_FRAME_HEIGHT)  # 4
    #print('cv2.CAP_PROP_FPS         :', cv2.CAP_PROP_FPS)           # 5
    #print('cv2.CAP_PROP_FRAME_COUNT :', cv2.CAP_PROP_FRAME_COUNT)   # 7

編輯 2020:如何獲取 OpenCV 的 USB 網絡攝像頭屬性 ID 中的所有屬性

width = vcap.get(cv2.CAP_PROP_FRAME_WIDTH )
height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT )
fps =  vcap.get(cv2.CAP_PROP_FPS)

width = vcap.get(3)
height = vcap.get(4)
fps = vcap.get(5)

對於 3.3.1 版本,方法已更改。 檢查此鏈接以了解更改: https : //docs.opencv.org/3.3.1/d4/d15/group__videoio__flags__base.html#ga023786be1ee68a9105bf2e48c700294d

代替cv2.cv.CV_CAP_PROP_FRAME_WIDTH使用上面鏈接中的cv2.CAP_PROP_FRAME_WIDTH和其他人。

cv2.__version__
'3.4.3' 

w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))
n_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

根據 OpenCV 文檔,您可以使用vcap.get(i)方法,其中i可以介於 0 和 21 之間。

對於 OpenCV versions = 4.xx

    width  = vcap.get(cv2.CAP_PROP_FRAME_WIDTH)   
    height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT)  

盡管這里有已解決的答案,但在 2021 年,情況發生了一些變化。 (OpenCV 版本 = 4.5.2

import cv2
cap = cv2.VideoCapture('video.mp4') #0 for camera


if cap.isOpened(): 
    width  = cap.get(cv2.CAP_PROP_FRAME_WIDTH)   # float `width`
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # float `height`
    fps = cap.get(cv2.CAP_PROP_FPS) # float `fps`
    total_frames = cap.get(cv2.CAP_PROP_FRAME_COUNT) # float `total_frame_in_the_video` (should not be applicable for camera)

對於ret, frame = cv2.VideoCapture使用frame.shape來獲取寬度和高度。

height, width, channels = frame.shape
    print(width)

您可以使用以下代碼通過 opencv 獲取視頻寬度和高度。

import cv2

vidcap = cv2.VideoCapture('video.mp4')
frameWidth = vidcap.get(cv2.CAP_PROP_FRAME_WIDTH)
frameHeight = vidcap.get(cv2.CAP_PROP_FRAME_HEIGHT)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM