こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

openCVの動画書き込みのプログラムを作っているのですが・・・

openCVの動画書き込みのプログラムを作っているのですが・・・

openCVで、読み込んだ動画(元動画)を背景差分法で2値化処理して出来た動画を保存する、というプログラムを作っています。
しかし、保存された動画を見ると、上手く書き込まれていません。というのも、元動画は15秒あるのですが、保存された動画を見ると、わずか2秒ほどで再生が終わってしまいます。

以下がプログラムのソースです。

#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

#define THRESHOLD_MAX_VALUE 255
#define THRESHOLD 45
#define WIDTH960
#define HEIGHT540

int main( int argc, char **argv ){
int key;
CvCapture *capture = NULL;
IplImage *frameImage;

IplImage *backgroundImage = cvCreateImage( cvSize(WIDTH, HEIGHT),
IPL_DEPTH_8U, 1 );
IplImage *grayImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 );
IplImage *differenceImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 );
IplImage *binaryImage = cvCreateImage( cvSize(WIDTH, HEIGHT), IPL_DEPTH_8U, 1 );

double fps = 30.0;
CvVideoWriter* VideoWriter = cvCreateVideoWriter("binary.avi", CV_FOURCC('F','L','V','1'), fps, cvSize(WIDTH, HEIGHT), 0 );

if ( ( capture = cvCreateFileCapture( "00011.avi" ) ) == NULL ) {
printf( "File Not Found\n" );
return -1;
}

frameImage = cvLoadImage("haikei.bmp");
if(frameImage == NULL){
printf("Can't Get\n");
return -1;
}
cvCvtColor( frameImage, backgroundImage, CV_BGR2GRAY );

while ( 1 ) {
frameImage = cvQueryFrame( capture );

if ( frameImage == NULL ){
break;
}

cvCvtColor( frameImage, grayImage, CV_BGR2GRAY );
cvAbsDiff( grayImage, backgroundImage, differenceImage );
cvThreshold( differenceImage, binaryImage, THRESHOLD, THRESHOLD_MAX_VALUE, CV_THRESH_BINARY );

cvWriteFrame(VideoWriter, binaryImage);

key = cvWaitKey( 10 );
if ( key == 'q' ) {
break;
}
}
cvReleaseCapture( &capture );
cvReleaseVideoWriter( &VideoWriter );
cvReleaseImage( &backgroundImage );
cvReleaseImage( &grayImage );
cvReleaseImage( &differenceImage );
cvReleaseImage( &binaryImage );
return 0;
}

抽出している際に、プロンプト画面に
Compiler did not align stack variables.~
と出てきます。
また、非圧縮などでやると再生が出来ません。
PC環境はWindowsXPです。

助けてください!!

投稿日時 - 2010-09-29 15:27:25

QNo.6216095

すぐに回答ほしいです

質問者が選んだベストアンサー

No1の回答に笑いましたw(すみません

さて、とりあえず、なんですが
OpenCVのサンプルから
「動画を読み込む」と「動画を保存する」を使って、
取り込んだ動画をそのまま保存するプログラムを作ってみてはいかがでしょうか。

現在の状態では、
(1).取り込みに失敗している
(2).変換に失敗している
(3).保存に失敗している

どれかわかりませんから・・。

投稿日時 - 2010-10-03 01:55:47

お礼

回答ありがとうございます。

No.1さんのはちょっとびっくりしましたww

プログラムの方は何とか自己解決できました!

投稿日時 - 2010-10-10 15:21:38

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

 痛々しくて、悲しい気持ちになりました。
>>厳しいことを聞くようですが、そこまでの借金を背負ってまでも大学に行く必要があったのでしょうか?
>これは、自分でもわかりません。
>ただ高校時代ににそこまで考えることはなかったので、今となっては「結果」です。

そうですよね。高校生に先まで分かれと言うのは難しいですよ。みんなが大学に行くなら生きたかったでしょうし。
 奨学金(貸与)学生のためと見せかけていますので、無理なく返すことができるイメージがあるのも分かります。
 今、アメリカを筆頭に日本にも同様の奨学金(実は、高額の借金)で苦しんでいる人がいます。もしも、北欧で生まれ育っていたなら、負わない悲しみです。あなたが悪いのではないと思います。
 でも、日本人である以上は借金は借金という現実もあります。
 恥じることなく、周りの方にお話されていいと思います。
 できるものなら、体験談として、多くの若い方にお伝えになるべきだと思います。他の方の役に立つと思います。
 そして、もし、私が親ならば、それを理由に反対はしないでしょう。どうしたら、早く返すことができるか、その方法を一緒に考えると思います。

それから、入学時は、未成年でしたよね?
今からでも、ご両親に相談できませんか?
ご両親にとりあえず代わってもらって返済してもらって、ご両親に借金を返すという方が気が楽だと思うのですが。きっと、無理なのでしょうね・・・。そう考えると、また、悲しい気持ちになります。
 親は、金を払うだけではなく、世の中の仕組みを教えるべきだと思います。

投稿日時 - 2010-09-29 15:46:16

補足

多分ですけど、回答先間違えてませんか??

投稿日時 - 2010-09-29 19:24:29

あなたにオススメの質問