ビデオ ファイル (.avi または .mov) を読み込み、Opencv を使用してモーションとエッジを検出したいです。 opencvの機能?
4 に答える
動画ファイルの読み方:
- 動画ファイルを読み込んでウィンドウに表示(C API)
- 動画ファイルを読み込んでウィンドウに表示(C++ API)
- ビデオファイルを読み取り、グレースケールに変換してからウィンドウに表示します(C API)
動きを追跡/検出する方法:
エッジ/輪郭を検出する方法:
形状を検出する方法の詳細については、この投稿を確認してください。
これは私にとってはうまくいきます、私はAVI
ファイルを使用しています。ファイル名でビデオを呼び出し、メインループで次のフレームを取得してシャットダウンしてから、終了するか別のビデオに変更します。
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;
}
注: Opencv はオーディオ再生をサポートしていません。opencv で ffmmpeg を使用する方法については、audio-output-with-video-processing-with- opencv を参照してください。
ビデオからフレームを読み取るための最短の例:
cap = cv::VideoCapture("foo.avi");
frame = cv::Mat;
cap >> frame;
opencv の python フォルダーに含まれているサンプルを確認する必要があります。それらはここにあります: opencv\samples\python2
そこには、opencv (cv2 形式) の基本機能と高度な機能の多くが示されています。ここの Web サイトには、多くのチュートリアル (主に C++) もあります: http://opencv.itseez.com/doc/tutorials/tutorials.html
ビデオ画像の読み書きはこちら: http://opencv.itseez.com/trunk/modules/highgui/doc/reading_and_writing_images_and_video.html
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