OpenCVでRAW画像を開くには

このQ&Aのポイント
  • OpenCVを使って、テキスト形式のヘッダーありのRAW画像(カラー)を、Cで書いたプログラムで開く方法を教えてください。
  • RAW画像を開く関数myRawImageの使用方法を教えてください。
  • RAW画像をbmpなどに変換せずに、そのまま開けるようにするためにはどの部分を修正すれば良いですか?
回答を見る
  • ベストアンサー

OpenCVでRAW画像(カラー)を開くには

OpenCVを使って、テキスト形式のヘッダーありのRAW画像(カラー)を、Cで書いたプログラムで開きたいのですが、 うまくいかず困っています。 “LoadRawImage”というWindowが起動しますが、真黒で何も表示されません。 RAW画像を開く関数myRawImageは以下のurlの「RAWデータの読み込みと表示」を参照させていただきました。(すみません、どうもありがとうございます。) http://wiki.livedoor.jp/mikk_ni3_92/d/raw%a5%c7%a1%bc%a5%bf%a4%ce%c6%c9%a4%df%b9%fe%a4%df%a4%c8%c9%bd%bc%a8 画像サイズはわかっているので、bmpなどに変換せず、RAWのまま開きたいのですが、どこを直せばいいのでしょうか。 どなたかヒントでも教えていただけると大変助かります、どうぞよろしくお願い致します。 //test.cpp #include <cv.h> #include <highgui.h> #include <iostream> #include <fstream> #include "raw_data_show.h" int main (int argc, char ** argv)================= { int x, y,i; uchar p1[3], p2[3]; IplImage *img1, *img2, *cp_img; img1 = myRawImage("D:\\My Pictures\\...\rawimage",500,500,3); cvShowImage("Load RawImage",img1); cvWaitKey(0); ============================================== #include <cv.h> #include <cxcore.h> #include <highgui.h> #include <iostream> #include <fstream> IplImage *myRawImage(char *filename, int w,int h,int channels) { if((channels != 3) && (channels != 1)) { std::cerr << " channel is not 3 or 1\n"; return NULL; } std::fstream ifs(filename,std::ios::in|std::ios::binary); if(!ifs.is_open()) { return NULL; } CvMat *Mat = cvCreateMat(h,w,CV_8UC3); ifs.read(reinterpret_cast<char*>(Mat->data.ptr),w*h*3); ifs.close(); IplImage img_hdr; IplImage *dst_img = cvGetImage (Mat, &img_hdr); IplImage *clone = cvCloneImage(dst_img);//クローン作成 cvReleaseImage(&dst_img); cvReleaseMat(&Mat); if(channels == 3){ for (i = 0; i < size; i++) { for (j = 0; j < size; j++) { CvMat m; float ret = 0.0; float a[] = { float (j) / size, float (i) / size }; cvInitMatHeader (&m, 1, 2, CV_32FC1, a); ret = svm.predict (&m); switch ((int) ret) { case 1: rcolor = CV_RGB (100, 0, 0); break; case 2: rcolor = CV_RGB (0, 100, 0); break; case 3: rcolor = CV_RGB (0, 0, 100); break; } cvSet2D (img, i, j, rcolor); } } cvCvtColor(clone,clone,CV_RGBA2BGR); return clone; } ========================================================

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

そのURLのRAWデータというのは、 R1バイト,G1バイト,B1バイトが画素数だけ単純に並んだバイナリーデータです 「テキスト形式のヘッダーありのRAW画像(カラー)」ではありません。 具体的なフォーマットが書いてないので、具体的にどうすればいいかなんてわかりません。 ・ヘッダを読み込み→strtolやscanf系で数値へ ・ヘッダに合せてcvCreatMat ・画素のデータをscanf系かstrtol等で数値へ→cvMatに という感じになるのでは

rosafilipes
質問者

補足

すみません、テキスト形式というのはヘッダーファイルのことでした、書き方がまずくてすみません。 画像ファイルはURLのデータと同じバイナリーデータで、画像サイズと、32ビットであることが書かれています。 cvCreatMatで読み込んで開けるか、やってみます。 kmeeさん、いつもすぐにアドバイスくださって、ありがとうございます。

関連するQ&A

  • OpenCVで32bit ヘッダ無しRaw画像表示

    OpenCVのIPLimage構造体にヘッダ無しRaw画像を読み込んで表示させたいのですが、OpenCVではヘッダ無しRaw画像を直接読み込む関数がないため(cvLoadImageは対応せず)自作しなければいけません。まだCプログラムを勉強し始めたばかりなのでなかなか上手くいかなくて困っております。どなたか教えていただけませんか?ここまで作っみました。コンパイルはできますが、原画像どおり表示してくれません。扱う画像はレントゲン画像で512*512 32bit実数データです。 #include <cv.h> #include <highgui.h> #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> int main(int argc, char *argv[]) { char infile[512]; /* (1) */ float *inputimg; /* (3) */ int i, j; int mszx, mszy; FILE *fp; IplImage* img; strcpy(infile,argv[1]); mszx = atoi(argv[2]); mszy = atoi(argv[3]); static const char* title="display"; inputimg = (float*)malloc(mszx*mszy*sizeof(float)); if((fp=fopen(infile,"rb")) == NULL) { printf("OPEN FAILED %s\n",infile); exit(0); } fread(inputimg, sizeof(float), mszx*mszy, fp); fclose(fp); img = cvCreateImage(cvSize(512,512),IPL_DEPTH_32F,1); cvSetZero(img); for (j = 0; j < mszy; j++) { for (i = 0; i < mszx; i++){ img->imageData[mszx * j + i] = inputimg[mszx * j + i]; } } cvNamedWindow(title,CV_WINDOW_AUTOSIZE); cvShowImage(title,img); cvWaitKey(0); cvDestroyWindow(title); cvReleaseImage(&img); return 0; } ここまでしかできませんでした。

  • openCVの画像処理について

    画像の中にある粒子の位置を検出し、座標の値の取得をどうしてもOpenCVをつかって、出したいと考えております。 プログラミングが実行したら、すべて0と表示されたり、エラーが出たりします。 現在、画像を読み込み、2値化し、2値化した画像の画素数を列ごとに足して、垂直方向の画素数の最大値の検出、2値化した画像の画素数を行ごとに足して、水平方向の画素数の最大値の検出を行っています。 使用した画像を添付させていただきますので、もしアドバイスなどいただけたらよろしくお願い致します。 #include <stdio.h> #include <math.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> #define X 640 #define Y 480 IplImage *grayImage; //グレースケール画像用IplImage IplImage *binaryImage; //2値画像用IplImage char windowNameBinarization[] = "Binarization";//2値化した画像を表示するウィンドウの名前 int levels = 115; //トラックバーの値(2値化の際の閾値) static int h[X][Y]; int main( /*int argc, char **argv*/ ){ // 画像を読み込む IplImage *sourceImage = cvLoadImage( "C:/Documents and Settings/Owner/My Documents/My Pictures/Logicool Webcam/Picture 10.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if ( sourceImage == NULL ) { // 画像が見つからなかった場合 printf( "画像が見つかりません\n" ); return -1; } // 画像を生成する IplImage *grayImage = cvCreateImage( cvGetSize(sourceImage), IPL_DEPTH_8U, 1 );//グレースケール画像用IplImage IplImage *binaryImage = cvCreateImage( cvGetSize(sourceImage), IPL_DEPTH_8U, 1 ); //2値画像用IplImage // BGRからグレースケールに変換する cvCvtColor( sourceImage, grayImage, CV_BGR2GRAY ); // グレースケールから2値に変換する cvThreshold( grayImage, binaryImage, levels, 255, CV_THRESH_BINARY ); /*グラフ値の取得*/ IplImage *img; img = cvCloneImage (binaryImage); //画像をコピー int bytes_per_pixel = ((img->depth & 255) / 8) * img->nChannels; // (1)画素値を順次取得 int i,j,k,t; int Hy[Y],Hx[X]; //宣言 //垂直方向の画素値 for(k = 0; k <Y /*img->height*/; k++) { Hy[k] = 0;//初期化 } if((unsigned char)img->imageData>levels){ for(j = 0;j < Y/*img->height*/; j++) { for(i = 0; i < X; i++) {Hy[j] += *(img->imageData + (img->widthStep*j) + (i*bytes_per_pixel)); } }} //水平方向の画素値 for(t = 0; t < X/*img->width*/; t++) { Hx[t]=0; //初期化 } if((unsigned char)img->imageData>levels){ for(i = 0;i < X/*img->width*/; i++) { for(j = 0;j < Y; j++) { Hx[i] = Hx[i]+h[i][j]; } }} //Hy[j]の最大値の座標を調べる int MY = Hy[0]; int my = 0; for(int j=0; j< Y-1; j++){ if(Hy[j]<Hy[j+1]){ MY = Hy[j+1]; my = j+1; } } //Hx[i]の最大値の座標を調べる int MX = Hx[0]; int mx = 0; for(int i=0; i< X-1; i++){ if(Hx[i]<Hx[i+1]){ MX = Hx[i+1]; mx = i+1; } } printf("垂直方向の最大値 %d , 垂直方向の最大値になるときのy軸の値 %d \n", MY,my); printf("水平方向の最大値 %d , 水平方向の最大値になるときのx軸の値 %d \n", MX,mx); int cvWaitKey(int delay=10); //どこでとめるかをあらわす cvReleaseImage( &sourceImage ); cvReleaseImage( &grayImage ); cvReleaseImage( &binaryImage ); cvDestroyWindow( windowNameBinarization); return 0 ; }

  • OpenCVでの画像サイズ取得について教えてください。

    OpenCVでの画像サイズ取得について教えてください。 rawデータをjpgにして取得し、その画像を4分割したいのですがエラーが3つ出てしまいます。 環境はVisual Studio2008です。 いろいろと調べたのですが、原因や対策がはっきりわからず、書き変えてもNGで困っています。 エラー:その1 「error LNK2028:未解決のトークン(0A00007B)"extern "C" struct IplImage *_cdecl cvLoadImage(char const roi.obj*.int)"(cvLoadImage@@$$J0YAPAU IplImage@@PBDH@Z)が関数"int _codecl main(int,char * *)"(?main@@$$HYAHHPAPAD@Z)で参照されました。」 エラー:その2 「error LNK2019: 未解決の外部シンボル"extern "C" struct IplImage * codecl cvLoadImage(char const *.int)" (?cvLoadImage@@$$J0YAPAU IplImage@@PBDH@Z)が関数"int_codecl main(int, char * *)" (?main@@$$HYAHHPAPAD@Z)で参照されました。」 エラー:その3 「fatal error LNK1120: 外部参照2が未解決です] '================== #pragma warning(disable : 4819) #include <cv.h> #include <highgui.h> #include <stdio.h> #define DIVX (4) #define DIVY (4) #define DIVXY (DIVX*DIVY) int main (int argc, char **argv) { int w, h IplImage *img=0; img=cvLoadImage("C:\・・・\\testfile.jpg, CV_LOAD_IMAGE_GRAYSCALE); w = img->width - img->width % DIVX + DIVX; h = img->height - img->height % DIVY + DIVY; printf("幅は%w, 高さは%h です。 \n"); } '=============================================== 画像サイズを取得し、画像を4分割したあと、画素値を変更したいと思っています。 できればjpgに変換せず、rawデータそのものの精度の画像を直接扱いたいのですが、 その場合、cvLoadImageでどう表記すると実現できるのでしょうか。 また、OpenCVのグレースケールは、何チャンネルなのでしょうか。 プログラム経験はありますが、OpenCVを使うため、C言語の勉強も始めたばかりです。 なにか見当違いな質問をしていたら申し訳ありません。 お忙しいところすみませんが、もしどなたか解決策をアドバイスいただける方がいらっしゃると 大変助かります。 どうぞ宜しくお願い致します。

  • OpenCV

    いつもお世話になっております。 添付の2値画像からハフ関数で直線抽出したいのですが、うまく行かず困っています。 エラーは表示されず、ただグレー 一色の出力です。 閾値、投票数、最小長さ、など値をいろいろ変えてみたのですがうまくいきません。 どなたか原因がおわかりであればぜひ教えてください。 よろしくお願い致します。 '================================================== ’void Sample(char *FilePath){ int i; float *line, rho, theta; double a, b, x0, y0; IplImage *src_img_std = 0, *src_img_prob = 0, *src_img_gray = 0; CvMemStorage *storage; CvSeq *lines = 0; CvPoint *point, pt1, pt2; src_img_gray = cvLoadImage(FilePath, CV_LOAD_IMAGE_GRAYSCALE); storage = cvCreateMemStorage(0); // (3)標準的ハフ変換による線の検出と検出した線の描画 lines = cvHoughLines2(src_img_gray, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI / 180, 1, 1, 0); for (i = 0; i <lines->total; i++) { line = (float *)cvGetSeqElem(lines, i); rho = line[0]; theta = line[1]; a = cos(theta); b = sin(theta); x0 = a * rho; y0 = b * rho; pt1.x = cvRound(x0 + 1000 * (-b)); pt1.y = cvRound(y0 + 1000 * (a)); pt2.x = cvRound(x0 - 1000 * (-b)); pt2.y = cvRound(y0 - 1000 * (a)); cvLine(src_img_std, pt1, pt2, CV_RGB(255, 0, 0), 3, 8, 0); } cvNamedWindow("Hough_line_standard", CV_WINDOW_AUTOSIZE); cvShowImage("Hough_line_standard", src_img_std); cvWaitKey(0); cvDestroyWindow("Hough_line_standard");

  • OpenCVの実行エラー

    OpenCVで下記の用なテストプログラムを作成しました。 --------------------------------------- #include <stdio.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> #pragma comment(lib, "cv.lib") #pragma comment(lib, "cxcore.lib") #pragma comment(lib, "highgui.lib") int main(void) { unsigned char *Image; IplImage* img = NULL; IplImage* clone = NULL; // 画像読み込み img = cvLoadImage("image.bmp", -1); // 画像コピー clone = cvCloneImage(img); return 0; } --------------------------------------- ところが、実行すると --------------------------------------- Bad argument(Bad image header) in function cvCloneImage, D:\User\VP\openCV\cxcore\src\cxarray.cpp --------------------------------------- というエラーメッセージがでて実行することができませんでした。 OpenCVに付属していたsampleプログラムは動作しました。 // 画像コピー clone = cvCloneImage(img); の一文をコメントアウトするとエラーはなぜかでません。 このエラーはどうしてでるのでしょうか? OSはwindowsXP コンパイルはC++6.0とVS2005の両方で試しましたが同じ結果がでます。

  • OpenCVで画像を読み込みたい

    OpenCVを勉強しようと思い先日始めました。 http://chihara.naist.jp/opencv/?FrontPage 上記のサイトに掲載されている通りにVC++ 2008 EEで ・環境変数PATH ・インクルードファイル ・ライブラリファイル ・リンカ の設定をしました。 これでいざプログラムをコンパイルして実行すると何故か画像が読み込んでくれません。 これらの設定以外の他にするべきことがあるのでしょうか? いきなり出鼻を挫かれたので困っています。よろしくお願いします。 OS:XP SP2 開発環境:VC++ 2008 EE 実行したプログラム ---------------------------------------------------------------- #include "cv.h" #include "highgui.h" int main( int argc, char** argv ) { IplImage* img; char* filename = "abc.bmp"; if( argc == 2 && (img = cvLoadImage( filename, 1)) != 0 ) { cvNamedWindow( "Image view", 1 ); cvShowImage( "Image view", img ); cvWaitKey(0); // イベント処理を含む場合には,これが重要. cvDestroyWindow( "Image view" ); cvReleaseImage( &img ); return 0; } return -1; } ----------------------------------------------------------------

  • OpenCVのエラーが取れません。

    VC++にてOpenCVを使って画像処理を行っています。 cvHoughCircles関数を使ってハフ変換による円検出をしているのですが、 「Null pointer(NULL array pointer is passed)  in function cvGetMat,C\User\VP\opencv\cxcore\src\cxarry.cpp(2780)  Press"Abort"to terminate application. Press"Retry"to debug(if the app is running under debugger). Press"Ignore"to continue(this is not safe).」 というエラーが出てしまいます。 これはいったいどういったエラーなのでしょうか? プログラムは以下の通りです。 //-------------------------------------------------- #include <stdio.h> #include <cv.h> #include <highgui.h> int main (int argc, char **argv) { int i; float *p; IplImage *src_img = 0, *src_img_gray = 0; CvMemStorage *storage; CvSeq *circles = 0; char *filename = "lena.jpg"; IplImage *image; //画像の読み込み・平滑化・二値化 image = cvLoadImage(filename, 0); // 0: グレイスケールで読み込む // (2)ハフ変換のための前処理(画像の平滑化を行なわないと誤検出が発生しやすい) cvSmooth (src_img_gray, src_img_gray, CV_GAUSSIAN, 11, 11, 0, 0); storage = cvCreateMemStorage (0); // (3)ハフ変換による円の検出と検出した円の描画 circles = cvHoughCircles (src_img_gray, storage, CV_HOUGH_GRADIENT, 1, 100, 20, 50, 10, MAX (src_img_gray->width, src_img_gray->height)); for (i = 0; i < circles->total; i++) { p = (float *) cvGetSeqElem (circles, i); cvCircle (src_img, cvPoint (cvRound (p[0]), cvRound (p[1])), 3, CV_RGB (0, 255, 0), -1, 8, 0); cvCircle (src_img, cvPoint (cvRound (p[0]), cvRound (p[1])), cvRound (p[2]), CV_RGB (255, 0, 0), 3, 8, 0); } // (4)検出結果表示用のウィンドウを確保し表示する cvNamedWindow ("circles", 1); cvShowImage ("circles", src_img); cvWaitKey (0); cvDestroyWindow ("circles"); cvReleaseImage (&src_img); cvReleaseImage (&src_img_gray); cvReleaseMemStorage (&storage); return 0; } //----------------------------------------------------- 解決方法など分かりましたら、よろしくお願いいたします。

  • OpenCVの連続画像読み込みについて

    こんにちは。 連続画像の読み込みが出来なくて困ってます。 今まではVisualStudioを使い、読み込んでいたので IplImage* src_img = cvLoadImage("sample.bmp", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if (src_img == NULL){ return 0; } のように書き直して動かしていたのですが http://opencv.jp/sample/initialization.html#combine の画像の連結のところで if (argc < 2) { return 1; } else { img_num = argc - 1; img = (IplImage **) cvAlloc (sizeof (IplImage *) * img_num); for (i = 0; i < img_num; i++) { img[i] = cvLoadImage (argv[i + 1], CV_LOAD_IMAGE_COLOR); if (img[i] == 0) return -1; } } ここをどのようにすれば連続画像を読み込めるようになるのか教えていただけないでしょうか。 よろしくお願いいたします。

  • OpenCVを用いたヒストグラムの比較について

     現在画像の類似度を求めるために、OpenCV1.0を使って色のヒストグラムの距離を求めるということを行っております。OpenCVで公開されているヒストグラム間の距離のサンプルプログラムを使って行っているのですが、結果があまり芳しくないためいろいろ調べなおしたところ、減色処理、量子化というワードにたどり着きました。  しかし調べてみてもいまいち分からず、行き詰っているのが現状です。どなたか減色処理や量子化について詳しい人がおりましたら、是非回答のほうよろしくお願いします。以下がOpenCVのコードなのですが、どこの部分をどのように変えたらそれが実現できるのかも是非回答お願いいたします。 #include <cv.h> #include <highgui.h> #include <math.h> #include <stdio.h> int main (int argc, char **argv) { char text[16]; int i, hist_size = 256, sch = 0; float range_0[] = { 0, 256 }; float *ranges[] = { range_0 }; double tmp, dist = 0; IplImage *src_img1 = 0, *src_img2 = 0, *dst_img1[4] = { 0, 0, 0, 0 }, *dst_img2[4] = { 0, 0, 0, 0}; CvHistogram *hist1, *hist2; CvFont font; CvSize text_size; // (1)二枚の画像を読み込む.チャンネル数が等しくない場合は,終了 if (argc >= 3) { src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); } if (src_img1 == 0 || src_img2 == 0) return -1; if (src_img1->nChannels != src_img2->nChannels) return -1; // (2)入力画像のチャンネル数分の画像領域を確保 sch = src_img1->nChannels; for (i = 0; i < sch; i++) { dst_img1[i] = cvCreateImage (cvSize (src_img1->width, src_img1->height), src_img1->depth, 1); dst_img2[i] = cvCreateImage (cvSize (src_img2->width, src_img2->height), src_img2->depth, 1); } // (3)ヒストグラム構造体を確保 hist1 = cvCreateHist (1, &hist_size, CV_HIST_ARRAY, ranges, 1); hist2 = cvCreateHist (1, &hist_size, CV_HIST_ARRAY, ranges, 1); // (4)入力画像がマルチチャンネルの場合,画像をチャンネル毎に分割 if (sch == 1) { cvCopy (src_img1, dst_img1[0], NULL); cvCopy (src_img2, dst_img2[0], NULL); } else { cvSplit (src_img1, dst_img1[0], dst_img1[1], dst_img1[2], dst_img1[3]); cvSplit (src_img2, dst_img2[0], dst_img2[1], dst_img2[2], dst_img2[3]); } // (5)ヒストグラムを計算,正規化して,距離を求める for (i = 0; i < sch; i++) { cvCalcHist (&dst_img1[i], hist1, 0, NULL); cvCalcHist (&dst_img2[i], hist2, 0, NULL); cvNormalizeHis

  • OpenCVでのcvCreateVideoWriterがうまくいきません

    今回複数枚のbmp画像群を、その画像につけられた4桁の連番の順に順次AVIファイルのフレームとして格納して行き、最終的にひとつのAVIファイルを出力するというプログラムを書いていますが、OpenCVの関数である「cvCreateVideoWriter」で躓いています。 CvVideoWriter* cvCreateVideoWriter( const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 ); という仕様で、第二引数に「-1」と入れることで、プログラム実行時ffmpegが自動的にどの動画像コーデックを使用するかを聞いてくるということだったのですが、そうしているにも関わらずコーデック選択画面は出ないどころか、出力された動画(avi)も再生できない破損したファイルとして出力されてしまいます。 何かコーデックをインストールする必要があるのか(動画のコーデックとして、Combined Community Codec Packをインストール済みです)、それともプログラム内にまずい箇所があるのか、わからなくてあせっています。どなたかわかる方いらっしゃいましたらご教授よろしくお願いいたします。 ソース↓↓ //--------------------------------------------------------- // bmp→aviコンバート //--------------------------------------------------------- #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 #include <stdio.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> #include <iostream> using namespace std; #include <fstream> int main(int argc, char** argv) { //変数定義----------------------------------------------- int key=NULL; IplImage* img = NULL; //読み込んだ画像ファイル用 char* outputWindow = "Output"; //進行状況確認用ウィンドウ CvVideoWriter* VideoWriter = NULL; //ビデオライタ char* filename = "test.avi"; //出力ファイル名 double fps = 30; //ビデオのフレームレート int i=0; //画像の連番カウント用 char ImageName[104]; //読み込む画像ファイル名 char NameTmp[100]; //上の連番なし //-------------------------------------------------------- //元画像の読み込み&フレームへの埋込み---------------------------------------------- cout << "画像名を入力してください(4桁連番号省略)" << endl; cin >> NameTmp; sprintf(ImageName,"%s0000.bmp",NameTmp); img = cvLoadImage(ImageName, CV_LOAD_IMAGE_GRAYSCALE); //画像一枚目の読み込みの if(img==NULL){ cout << ImageName << "の読み込み失敗" <<endl; return 1; } //進行状況確認用ウィンドウ展開 cvNamedWindow(outputWindow, CV_WINDOW_AUTOSIZE); //ログファイル展開 std::ofstream ofs; ofs.open( "test.txt" ); ofs << "1枚目の画像展開成功" << std::endl; //ビデオライタ展開 VideoWriter = cvCreateVideoWriter(filename, -1, fps, cvGetSize(img), 0); ofs << "ビデオライタ展開" << std::endl; while(img!=NULL){ //画像ファイルの連番に合わせて読み込むファイル名を変更 if(i<10){ sprintf(ImageName,"%s000%d.bmp",NameTmp,i); } else if(i<100){ sprintf(ImageName,"%s00%d.bmp",NameTmp,i); } else if(i<1000){ sprintf(ImageName,"%s0%d.bmp",NameTmp,i); } else{ sprintf(ImageName,"%s%d.bmp",NameTmp,i); } //進境状況をウィンドウに出力 cvShowImage(outputWindow, img); //進行状況確認用。10ms待つ key = cvWaitKey(10); //ビデオ書き込み cvWriteFrame(VideoWriter,img); cout << ImageName << endl; i+=1; img = cvLoadImage(ImageName, CV_LOAD_IMAGE_GRAYSCALE); //次のフレーム画像の読み込み ofs << i << "枚目の画像書き込み成功" << std::endl; } //ビデオ書き込み用メモリを開放 cvReleaseVideoWriter(&VideoWriter); //ログファイルを閉じる ofs.close(); //進行状況確認ウィンドウを閉じる cvDestroyWindow(outputWindow); return 0; }