- 締切済み
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; } --------------------------------------------------- これが作成中のプログラムです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
多分やられたい事は、こんな事じゃないかと思いプログラムを修正してみました。 フレームの取得とかは意味が分かりませんでしたので、やっていません。 実行してはいませんので、あしからず。。。 #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 lp; int count = 0; FILE *fp; time_t timer[1000]; 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'){ /*現在時間の取得*/ timer[count] = time(NULL); count++; } } cvReleaseCapture( &capture ); cvDestroyAllWindows(); //入力結果をファイルに出力 fp = fopen("frame.txt","w"); { for(lp = 0; lp < count ; lp++){ date = localtime(&timer[lp]); strftime(str, 255, "%Y, %B, %d, %A %p%I:%M:%S", date); fprintf(fp,"%s\n",str); } } fclose(fp); return 0; }