Apuntes Opencv

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

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.

You might also like