Get video dimension in python-opencv

Question:

I can get size of image, like this:

import cv2

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

How about video?

Asked By: karavanjo

||

Answers:

It gives width and height of file or camera as float (so you may have to convert to integer)

But it always gives me 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)

It seems it can works fps = vcap.get(7) but I checked this only on one file.


EDIT 2019: Currently cv2 uses little different names

cv2.CAP_PROP_FRAME_WIDTH   # 3
cv2.CAP_PROP_FRAME_HEIGHT  # 4

cv2.CAP_PROP_FPS           # 5
cv2.CAP_PROP_FRAME_COUNT   # 7

but they have the same values: 3, 4, 5, 7

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

EDIT 2020: All properties in How do I get usb webcam property IDs for OpenCV

Answered By: furas

For the 3.3.1 version, the methods have changed. Check this link for the changes: https://docs.opencv.org/3.3.1/d4/d15/group__videoio__flags__base.html#ga023786be1ee68a9105bf2e48c700294d

Instead of cv2.cv.CV_CAP_PROP_FRAME_WIDTH use cv2.CAP_PROP_FRAME_WIDTH and others as necessary from the link above.

Answered By: Nikhil Kasukurthi
width = vcap.get(cv2.CAP_PROP_FRAME_WIDTH )
height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT )
fps =  vcap.get(cv2.CAP_PROP_FPS)

or

width = vcap.get(3)
height = vcap.get(4)
fps = vcap.get(5)
Answered By: GGEv
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))
Answered By: mrgloom

You can use the vcap.get(i) method, where i can be between 0 and 21, according to the OpenCV docs.

Answered By: Ignacio Hernández

For OpenCV versions = 4.x.x:

    width  = vcap.get(cv2.CAP_PROP_FRAME_WIDTH)   
    height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT)  
Answered By: YScharf

Though solved answers are here, in 2021, it got a little changed. (OpenCV version = 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)

Answered By: Joyanta J. Mondal

for ret, frame = cv2.VideoCapture use frame.shape to get Width and Height.

height, width, channels = frame.shape
    print(width)
Answered By: Steven Cornect
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.