• 締切済み

ファイルへのデータ書き出しが出来なくて困っています。

openCVを利用し、用意した画像1、画像2間のオプティカルフローを計算し、画像3に描画するというプログラムを組みました。 その過程での、オプティカルフローのx成分「vel_x」、y成分「vel_y」の値をテキストファイルに書き出したいのですが、それぞれ「003B3340」「003B33E0」と記録されるだけで(多分アドレス?)うまくいきません。 どなたか詳しい方、ご教授いただけると幸いです。 環境はWindows XP、Visual C++ .NET2003です。 以下にコードを示します。 #include <cv.h> #include <highgui.h> #include <stdio.h> #include <fstream> const char *imgA_file = "01.bmp"; const char *imgB_file = "02.bmp"; using namespace std; int main(int argc, char** argv){ IplImage *imgA_src = cvLoadImage( imgA_file, -1); //画像読み込み IplImage *imgB_src = cvLoadImage( imgB_file, -1); IplImage *imgA = cvCreateImage(cvGetSize(imgA_src), IPL_DEPTH_8U, 1); cvCvtColor(imgA_src, imgA, CV_BGR2GRAY); IplImage *imgB = cvCreateImage(cvGetSize(imgA_src), IPL_DEPTH_8U, 1); cvCvtColor(imgB_src, imgB, CV_BGR2GRAY); IplImage *vel_x = cvCreateImage(cvGetSize(imgA_src), IPL_DEPTH_32F, 1); //x,y方向の速度を記録するバッファを確保する IplImage *vel_y = cvCreateImage(cvGetSize(imgA_src), IPL_DEPTH_32F, 1); IplImage *imgC = cvCloneImage(imgA); //結果画像用に入力画像をコピーする cvCalcOpticalFlowLK( imgA, imgB, cvSize( 11, 11), vel_x, vel_y); //オプティカルフローを求める,第3引数:ウインドウサイズ ofstream ofx("vel_x.txt"); //vel_x, vel_y のデータをテキストへ書き込み string buf; ofx << vel_x << endl; ofstream ofy("vel_y.txt"); buf; ofy << vel_y << endl; /* FILE *fp1, *fp2; //vel_x, vel_y のデータをテキストへ書き込み fp1 = fopen("vel_x.txt", "w"); fp2 = fopen("vel_y.txt", "w"); fprintf(fp1, "%d", vel_x); fprintf(fp2, "%d", vel_y); fclose(fp1); fclose(fp2); const CvArr *m, *n; // FILE *fp1, *fp2; fp1 = fopen("vel_x.txt", "r"); fp2 = fopen("vel_y.txt", "r"); fscanf(fp1, "%d", &m); fscanf(fp2, "%d", &n); fclose(fp1); fclose(fp2); */ for ( int i=0;i<imgA->height;i+=10 ){ //結果画像の作成 for ( int j=0;j<imgA->width;j+=10 ){ int dx = (int)cvGetReal2D( vel_x, i, j); int dy = (int)cvGetReal2D( vel_y, i, j); cvLine( imgC, cvPoint( j, i), cvPoint( j+dx, i+dy), CV_RGB( 255, 255, 255), 1, 8, 0); cvRectangle( imgC, cvPoint( j+dx-1, i+dy-1), cvPoint( j+dx+1, i+dy+1), CV_RGB( 255, 255, 255), 1, 8, 0); } } cvSaveImage( "03.bmp", imgC); //画像保存 cvReleaseImage( &imgA); cvReleaseImage( &imgB); cvReleaseImage( &vel_x); cvReleaseImage( &vel_y); return 0; }

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

stlに IplImageのイテレータがあるとは思えません OpenCVにも定義されていないと思いますよ IplImageがどのような構造になっているのかちゃんとドキュメントで調べてその内容を書き出すようにしないと無理だと思います

keita7
質問者

補足

調べてみたのですが、IplImageの構造ってあまり詳しく解説されてないんですね。 もう少し内容の書き出し方について調べてみます。 ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「アドレス?」と思っているならデリファレンスすればいいのに. ところでこれ, 本当に 1つのプログラムなの?

keita7
質問者

補足

1つのプログラム?ですよ。 そのデリファレンスができなくてとまどっているのです。 わかりにくくてすみません。

関連するQ&A