open cvで配列の値をテキストに出力するプログラム
こんにちわ。
今、open cvで映像を読み込みその映像の何フレーム目でキー入力がされたかを出力するプログラムを作成しています。
そこで、キー入力されたキーとその時のフレーム、時間の結果を配列に格納して、その内容をテキストに出力したいのですがうまくいきません。ファイル出力された結果は上書きされて最後に行ったキー入力の結果しか出力されません。全ての結果をテキストに出力できるようにしたいのでお願いします。
いろいろ不具合があると思うので教えてください。
----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "cxcore.h"
#include "cv.h"
#include "image.h"
//読み込む動画ファイル名
char* input_filename="video2_result.avi";
//IplImage
IplImage* src;
IplImage* gray;
IplImage* canny;
int main(void)
{
char wname[] = "input";
CvCapture* capture;
IplImage *frame;
int key;
int a[1000];
int count = 0;
FILE *fp;
time_t timer;
struct tm *date;
char str[256];
capture = cvCaptureFromFile("video2_result.avi");
cvNamedWindow(wname,1);
for(;;){
frame = cvQueryFrame(capture);
if(frame == NULL)
break;
cvShowImage(wname,frame);
key = cvWaitKey(30);
/*キー入力*/
if(key == 'q')
break;
if(key == 'a'){
printf("%d\n",count);
/*現在時間の取得*/
timer = time(NULL);/* 経過時間を取得 */
date = localtime(&timer);/* 経過時間を時間を表す構造体 date に変換 */
strftime(str, 255, "%Y, %B, %d, %A %p%I:%M:%S", date);
printf("%s\n", str);
}
count++;
}
cvReleaseCapture( &capture );
cvDestroyAllWindows();
//入力結果をファイルに出力
fp = fopen("frame.txt","w");
{
fprintf(fp,"%d,\n",a[count]);
fprintf(fp,"%s,\n",str);
fprintf(fp,"\r\n");
}
fclose(fp);
return 0;
}
---------------------------------------------------
これが作成中のプログラムです。
お礼
どうもありがとうございました。 結局ループが回っていてもとまっていて欲しいので その時間分(例えば3秒)だけとまっていて欲しいと いうことで、以下の様にしてみましたが、結果は同じ でした(すべての操作が終わるまでコマンド画面でした)。 Do While Timer+3 > Timer DoEvents if Timer+3 > Timer text1.text = "Aaaa" Do While Timer+3 > Timer DoEvents Loop end if Loop 基本的には何秒間かループの中で止まっていて くれればよいのですが。 スリープみたいなのでもかまいませんが、その間も しっかりForm画面を表示をしていて欲しいのですが, なぜかそれはできないことなんでしょうか? データを何秒おきかに見に行く際にもやはり、全部読んで から表示ということはないと思いますので、何らかの 手法があるのではと思いまして。そちらの方法でもかまい ませんので何かよい例がありましたら教えてください。