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?
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
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)
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.
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))
For OpenCV versions = 4.x.x:
width = vcap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT)
for ret, frame = cv2.VideoCapture use frame.shape to get Width and Height.
height, width, channels = frame.shape
print(width)
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)
You can use the vcap.get(i) method, where i can be between 0 and 21, according to the OpenCV docs.
You can get video width and height with opencv using below code.
import cv2
vidcap = cv2.VideoCapture('video.mp4')
frameWidth = vidcap.get(cv2.CAP_PROP_FRAME_WIDTH)
frameHeight = vidcap.get(cv2.CAP_PROP_FRAME_HEIGHT)