APUNTES OPENCV
t is same as capturing from Camera, just change camera index with video file
name. Also while displaying the frame, use appropriate time for cv2.waitKey().
If it is too less, video will be very fast and if it is too high, video will be slow
(Well, that is how you can display videos in slow motion). 25 milliseconds will
be OK in normal cases.
import numpy as np
import cv2
cap = cv2.VideoCapture('vtest.avi')
while(cap.isOpened()):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
VideoCapture::open
Python: cv2.VideoCapture.open(filename)
device id of the opened video capturing device (i.e. a camera index).
The methods first call VideoCapture::release() to close the already opened file or
camera.
Python: cv2.VideoCapture.isOpened() retval
Returns true if video capturing has been initialized already. If the previous call
to VideoCapture constructor or VideoCapture::open succeeded, the method
returns true.
Python: cv2.VideoCapture.release() None
The methods are automatically called by subsequent VideoCapture::open() and by
VideoCapture destructor. The C function also deallocates memory and clears *capture
pointer.
VideoCapture::grab
Grabs the next frame from video file or capturing device.
C++: bool VideoCapture::grab()
Python: cv2.VideoCapture.grab() retval
C: int cvGrabFrame(CvCapture* capture)
Python: cv.GrabFrame(capture) int
The methods/functions grab the next frame from video file or camera and return true (nonzero) in the case of success.
The primary use of the function is in multi-camera environments, especially when the
cameras do not have hardware synchronization. That is, you call VideoCapture::grab()
for each camera and after that call the slower method VideoCapture::retrieve() to
decode and get frame from each camera. This way the overhead on demosaicing or motion
jpeg decompression etc. is eliminated and the retrieved frames from different cameras will
be closer in time.
Also, when a connected camera is multi-head (for example, a stereo camera or a Kinect
device), the correct way of retrieving data from it is to call VideoCapture::grab first and
then call VideoCapture::retrieve() one or more times with different values of the
channel parameter. See
https://github.com/Itseez/opencv/tree/master/samples/cpp/openni_capture.cpp
VideoCapture::retrieve
Decodes and returns the grabbed video frame.
C++: bool VideoCapture::retrieve(Mat& image, int channel=0)
Python: cv2.VideoCapture.retrieve([image[, channel]]) retval, image
C: IplImage* cvRetrieveFrame(CvCapture* capture, int streamIdx=0
Python: cv.RetrieveFrame(capture) image
The methods/functions decode and return the just grabbed frame. If no frames has been
grabbed (camera has been disconnected, or there are no more frames in video file), the
methods return false and the functions return NULL pointer.
Note
OpenCV 1.x functions cvRetrieveFrame and cv.RetrieveFrame return image stored
inside the video capturing structure. It is not allowed to modify or release the image! You
can copy the frame using cvCloneImage() and then do whatever you want with the copy.
VideoCapture::read
Grabs, decodes and returns the next video frame.
Python: cv2.VideoCapture.read([image]) retval, image
C: IplImage* cvQueryFrame(CvCapture* capture)
Python: cv.QueryFrame(capture) image
The methods/functions combine VideoCapture::grab() and
VideoCapture::retrieve() in one call. This is the most convenient method for reading
video files or capturing data from decode and return the just grabbed frame. If no frames
has been grabbed (camera has been disconnected, or there are no more frames in video
file), the methods return false and the functions return NULL pointer.
Note
OpenCV 1.x functions cvRetrieveFrame and cv.RetrieveFrame return image stored
inside the video capturing structure. It is not allowed to modify or release the image! You
can copy the frame using cvCloneImage() and then do whatever you want with the copy.
VideoCapture::get
Returns the specified VideoCapture property
C++: double VideoCapture::get(int propId)
Python: cv2.VideoCapture.get(propId) retval
C: double cvGetCaptureProperty(CvCapture* capture, int property_id)
Python: cv.GetCaptureProperty(capture, property_id) float
Parameters: propId
Property identifier. It can be one of the following:
CV_CAP_PROP_POS_MSEC Current position of the video file in
milliseconds or video capture timestamp.
CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be
decoded/captured next.
CV_CAP_PROP_POS_AVI_RATIO Relative position of the
video file: 0 - start of the film, 1 - end of the film.
CV_CAP_PROP_FRAME_WIDTH Width of the frames in the
video stream.
CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the
video stream.
CV_CAP_PROP_FPS Frame rate.
CV_CAP_PROP_FOURCC 4-character code of codec.
CV_CAP_PROP_FRAME_COUNT Number of frames in the
video file.
CV_CAP_PROP_FORMAT Format of the Mat objects returned by
retrieve() .
CV_CAP_PROP_MODE Backend-specific value indicating the
current capture mode.
CV_CAP_PROP_BRIGHTNESS Brightness of the image (only
for cameras).
CV_CAP_PROP_CONTRAST Contrast of the image (only for
cameras).
CV_CAP_PROP_SATURATION Saturation of the image (only
for cameras).
CV_CAP_PROP_HUE Hue of the image (only for cameras).
CV_CAP_PROP_GAIN Gain of the image (only for cameras).
CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
CV_CAP_PROP_CONVERT_RGB Boolean flags indicating
whether images should be converted to RGB.
CV_CAP_PROP_WHITE_BALANCE Currently not supported
CV_CAP_PROP_RECTIFICATION Rectification flag for stereo
cameras (note: only supported by DC1394 v 2.x backend currently)
Note: When querying a property that is not supported by the backend used by the
VideoCapture class, value 0 is returned.
VideoCapture::set
Sets a property in the VideoCapture.
C++: bool VideoCapture::set(int propId, double value)
Python: cv2.VideoCapture.set(propId, value) retval
C: int cvSetCaptureProperty(CvCapture* capture, int property_id, double value)
Python: cv.SetCaptureProperty(capture, property_id, value) retval
Parameters:
propId
Property identifier. It can be one of the following:
1. CV_CAP_PROP_POS_MSEC Current position of the
video file in milliseconds.
2. CV_CAP_PROP_POS_FRAMES 0-based index of the
frame to be decoded/captured next.
3. CV_CAP_PROP_POS_AVI_RATIO Relative position of
the video file: 0 - start of the film, 1 - end of the film.
4. CV_CAP_PROP_FRAME_WIDTH Width of the frames
in the video stream.
5. CV_CAP_PROP_FRAME_HEIGHT Height of the frames
in the video stream.
6. CV_CAP_PROP_FPS Frame rate.
7. CV_CAP_PROP_FOURCC 4-character code of codec.
8. CV_CAP_PROP_FRAME_COUNT Number of frames in
the video file.
9. CV_CAP_PROP_FORMAT Format of the Mat objects
returned by retrieve() .
10. CV_CAP_PROP_MODE Backend-specific value
indicating the current capture mode.
11. CV_CAP_PROP_BRIGHTNESS Brightness of the image
(only for cameras).
12. CV_CAP_PROP_CONTRAST Contrast of the image (only
for cameras).
13. CV_CAP_PROP_SATURATION Saturation of the image
(only for cameras).
14. CV_CAP_PROP_HUE Hue of the image (only for
cameras).
15. CV_CAP_PROP_GAIN Gain of the image (only for
cameras).
16. CV_CAP_PROP_EXPOSURE Exposure (only for
cameras).
17. CV_CAP_PROP_CONVERT_RGB Boolean flags
indicating whether images should be converted to RGB.
18. CV_CAP_PROP_WHITE_BALANCE Currently
unsupported
19. CV_CAP_PROP_RECTIFICATION Rectification flag for
stereo cameras (note: only supported by DC1394 v 2.x
backend currently)
value Value of the property.
VideoWriter
class VideoWriter
Video writer class.
VideoWriter::VideoWriter
VideoWriter constructors
Python: cv2.VideoWriter([filename, fourcc, fps, frameSize[, isColor]]) <VideoWriter
object>
Python: cv.CreateVideoWriter(filename, fourcc, fps, frame_size, is_color=true)
CvVideoWriter
Python: cv2.VideoWriter.isOpened() retval
Python: cv2.VideoWriter.open(filename, fourcc, fps, frameSize[, isColor]) retval
Python: cv2.VideoWriter.write(image) None
Parameters:
filename Name of the output video file.
fourcc 4-character code of codec used to compress the frames. For
example, CV_FOURCC('P','I','M','1') is a MPEG-1 codec,
CV_FOURCC('M','J','P','G') is a motion-jpeg codec etc. List of
codes can be obtained at Video Codecs by FOURCC page.
fps Framerate of the created video stream.
frameSize Size of the video frames.
isColor If it is not zero, the encoder will expect and encode color
frames, otherwise it will work with grayscale frames (the flag is
currently supported on Windows only).
The constructors/functions initialize video writers. On Linux FFMPEG is used to write
videos; on Windows FFMPEG or VFW is used; on MacOSX QTKit is used.
ReleaseVideoWriter
Releases the AVI writer.
C: void cvReleaseVideoWriter(CvVideoWriter** writer)
The function should be called after you finished using CvVideoWriter opened with
CreateVideoWriter().
VideoWriter::open
Initializes or reinitializes video writer.
C++: bool VideoWriter::open(const string& filename, int fourcc, double fps, Size
frameSize, bool isColor=true)
Python: cv2.VideoWriter.open(filename, fourcc, fps, frameSize[, isColor]) retval
The method opens video writer. Parameters are the same as in the constructor
VideoWriter::VideoWriter().
VideoWriter::isOpened
Returns true if video writer has been successfully initialized.
C++: bool VideoWriter::isOpened()
Python: cv2.VideoWriter.isOpened() retval
VideoWriter::write
Writes the next video frame
C++: VideoWriter& VideoWriter::operator<<(const Mat& image)
C++: void VideoWriter::write(const Mat& image)
Python: cv2.VideoWriter.write(image) None
C: int cvWriteFrame(CvVideoWriter* writer, const IplImage* image)
Python: cv.WriteFrame(writer, image) int
writer Video writer structure (OpenCV 1.x API)
image The written frame
Parameters:
The functions/methods write the specified image to video file. It must have the same size as
has been specified when opening the video writer.