ファイルへのデータ書き出しが出来なくて困っています。
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;
}
お礼
回答ありがとうございます 例まで書いて頂いたおかげできちんと理解することができました。お忙しい中わざわざありがとうございます^^