I want to read video file(.avi or .mov) and detect motion and edges using Opencv.Can u help me with code?I want to create a GUI in which we can select the video file,then we can carry out image processing functions in opencv?
问题:
回答1:
How to read a video file:
- Read video file and display it on a window (C API)
- Read video file and display it on a window (C++ API)
- Read video file, convert it to grayscale then display it on a window (C API)
How to track/detect motion:
- Opencv Motion detection with tracking
- How to do motion tracking of an object using video?
- The OpenCV Video Surveillance / Blob Tracker Facility
How to detect edges/countours:
- Using
cvCanny()
- Using
cvCanny()
andcvFindContours()
- Using
cvCornerHarris()
And for more info on how to detect shapes, check this post.
回答2:
This works for me, I'm using AVI
files.
Call video withe filename, in your main-loop get the next frame and shutdown before terminating or changing to another video.
IplImage *videoframe;
int videoFps;
CvCapture *videoCapture=NULL;
int video(char *videoFile) {
int key;
/* load the AVI file */
videoCapture = cvCaptureFromAVI( videoFile );
/* always check */
if( !videoCapture )
return 0;
/* get fps, needed to set the delay */
videoFps = ( int )cvGetCaptureProperty( videoCapture, CV_CAP_PROP_FPS );
/* display video */
cvNamedWindow( "video", 0 );
}
void videoNext() {
if ( ! videoCapture ) return;
videoframe = cvQueryFrame( videoCapture );
if( !videoframe ) return;
cvShowImage( "video", videoframe );
/* quit if user press 'q' */
int key = cvWaitKey( 1000 / videoFps );
}
void videoShutdown() {
/* free memory */
cvReleaseCapture( &videoCapture );
cvDestroyWindow( "video" );
return;
}
Note: Opencv doesn't support audio playback On how to use ffmmpeg with opencv see audio-output-with-video-processing-with-opencv
回答3:
The shortest example for reading a frame from a video :
cap = cv::VideoCapture("foo.avi");
frame = cv::Mat;
cap >> frame;
回答4:
You should look at the samples included in the python folder for opencv. They will be found here: opencv\samples\python2
There you will find many of the basic and advanced features of opencv (in the cv2 format) demonstrated. There are also many tutorials (mainly in c++) on the website here: http://opencv.itseez.com/doc/tutorials/tutorials.html
Reading and writing video images is here: http://opencv.itseez.com/trunk/modules/highgui/doc/reading_and_writing_images_and_video.html
For initial video capture from AVI:
import cv2
import cv2.cv as cv
import numpy as np
cap = cv2.VideoCapture(filename)
img = cv2.VideoCapture.read()
if img:
print img.get(cv.CV_CAP_PROP_FRAME_HEIGHT)
print type(img)
# loop through rest of frames reading one at a time