• 締切済み

3次元rawデータの保存方法を教えてください

プログラミング初心者の大学生です。 現在C++ Builder XEでプログラミングを行っています。 さまさまな画像処理を処理を施した256×256×256の3次元MRIのrawデータをそのままrawデータとして保存する方法が全く分からず、困っています。 画像はImage J等で開く際に、unsigned shortで開けるようにしろと言われました。 プログラミングをほとんど教わっていないのに、先生からいきなりやれと言われて非常に困っています。 よろしくお願いします。

みんなの回答

  • TT414
  • ベストアンサー率18% (72/384)
回答No.1

fp=fopen(filename,"wb"); fwrite(data,sizeof(data[0][0][0]),256*256*256,fp); fclose(fp);

yunogaudi
質問者

補足

回答ありがとうございます。 私が今やっているのはGUIで、保存ボタンを押したらファイルの場所と名前を決めるコマンドが出て、そこに保存できるようにしたいです。SaveDialogを使うやつです。 その場合、このコードの前に何を書けばよいのでしょうか? 最初の質問の時にすでに書いておくべきでした。 言葉足らずですみません。 教えていただけると幸いです。 よろしくお願いします。

関連するQ&A

  • raw形式からbmp形式への書き込み (画像処理)

    今、raw形式のファイルを読み込んで、bmp形式への書き込みを 行うプログラムを作成しているのですがうまくいきません. 作成したプログラムの一部は以下のようになっています. ------------------rawファイルを読み込む関数の一部------------- //1次元配列の確保 tmp=us_Calloc2(width,height); //画像の読み込み fread(tmp,sizeof(unsigned short),width*height,fp); //2次元配列の確保 img->data=us_Calloc1(width,height); //1次元配列から2次元配列にデータを移動する for(i=0; i<height; i++){ for(j=0; j<width; j++){ img->data[i][j]=tmp[(width*i)+j]; } } ------------------------------------------------------------ --------------bmpファイルに書きこむ(一部)-------------- //bufのメモリ領域の確保 buf=us_Calloc2(width,height); for(i=0; i<height; i++){ for(j=0; j<width; j++){ buf[(width*i)+j]=img->data[i][j]; } } //BMPのファイルヘッダーの出力(省略) //BMPの情報ヘッダーの出力(省略) //画像データの出力 if(fwrite(buf,sizeof(unsigned short),size,fp)!=size){ printf("画像をBMPに書き込むことができませんでした.\n"); free(buf); fclose(fp); exit(-1); } } このように書いたのですが、うまくBMPファイルに出力できません. アドバイスよろしくお願いします.

  • SDKにてRAW画像(ヘッダ情報0)の表示

    現在RAW画像(ヘッダ情報0)の表示プログラムをSDKにて作成中です。 色々と細かな質問に対してお答えいただいた皆様に感謝します。 おかげで一応表示することができました。 しかし新たな疑問が出てきてしまいました。 詳しく説明します。 まず入力画像情報をグローバルな構造体により管理するため、 typedef struct{ unsigned char *Input_Image; int Width; int Height; HWND hwnd; char szFileName[MAX_PATH]; char szFileTitle[MAX_PATH]; LPBITMAPINFO lpBitmapInfo; HANDLE hMemBitmapInfo; HANDLE hMemInput_Image; int flag; }IMAGEINFORMATION; static IMAGEINFORMATION *Image; このように定義しました。 ちなみにこの構造体メンバの最初のメンバ*Input_Imageは入力画像が格納するポインタです。今回の問題に対しこの*Input_Imageメンバのみ注意をお願いします。 画像入力処理として Image->hMemInput_Image = GlobalAlloc(GHND, sizeof(unsigned char) * Image->Height * Image->Width); Image->Input_Image = (unsigned char *)GlobalLock(Image->hMemInput_Image); により画像情報のポインタをImage->Input_Imageに格納します。 しかし入力した情報をそのまま使用すると、表示した場合に上下さかさまに反転して表示されてしまうので、この後に画像情報の反転処理を行わなければなりません。この反転処理を行う関数をvoid ReverseBitmap(unsigned char *)として、内容を次に示します。 void ReverseBitmap(unsigned char *Input) {   int i, j, width, height;   unsigned char temp;   width = Image->Width-1;   height = Image->Height-1;   for(i=0; i<=height; i++){     for(j=0; j<=width; j++){       temp = Input[width * (height - i) + j];       Input[width * (height - i) + j] = Input[width * i + j];       Input[width * i + j] = temp;     }   } } 関数実行の記述は  ReverseBitmap(Image->Input_Image);  のように行いました。 これにより反転した配列が ReverseBitmap関数の引数に格納されていると考えたのですが、結果は反映されていませんでした。 結果として色々と試してみたのですが、どうやってもさかさまのまま表示されてしまいます。 関数への引数の渡し方、反転の仕方に問題があるようならアドバイスをお願いします。 そして、反転処理を記述した場合、2次元画像を1次元配列で操作するのは結構めんどくさいです。なのでこの上の定義をもとに、反転処理を2次元配列にて行うような方法はないでしょうか? こちらの疑問もよろしくお願いします。

  • RAW画像の保存方法

    ニコンCaptureNXを購入し、ようやくRAW画像を処理できるようになりました。 夏山で撮った写真で気に入ったものがあったので、CaptureNXで補正後、TIFF形式で保存しA3プリンターを持っている知人に印刷してもらおうしたところ、「このドキュメントで使用されている色数はサポートされていません。色数を初期設定値に返還しますか」のメッセージがでるそうです。 知人のところはCaptureNXはなくAdobe Photoshopで開こうとしたそうですす。 RAW画像を補正後、どのようにして保存すればよいのでしょうか。 よろしくお願いします。

  • 3次元データを3D表示

    3Dプログラミング初心者です。 3次元データ(X,Y,Z)が多数あり、これらの点を3次元散布図のように表示させたいと考えてます。 3次元のデータは不規則ではなく、実物から3次元計測をして取得したデータです。 また、3次元の画像はマウスで回転させて見る方向を変えれるようにしたいです。 画像表示プログラムを、VC++もしくはVB.NETで作成したいのですが、 作成するにあたり、どのように作っていけばいいのかわかりません。 大まかな作成の流れ、もしくは参考になるサイトなどありましたら、 教えてください。 尚、プログラミングに必要な数学の知識は勉強しました。

  • RAWデータで初めて撮影したのですが

    使ったカメラはキャノン20Dで、RAW+M(大きめ)で撮影しました。 これをWindowdsXPのマイピクチャへ保存したのですが、それぞれの写真のデータがJPEGイメージとCR2ファイル(初めて見たファイル)と2種類になってしまいました。 フォトショップで加工をしたいのですが、JPEGだけしか表示されず、CR2ファイルは表示されません。 改めてRAWデータで作業をするためにはどのようにすれば良いでしょうか? ちなみにCFカードからデータを移してしまったので、カードは空の状態です。

  • RAWデーターのメリット、目的は何でしょうか?

    お世話になります。 1眼デジは通常のJPEGとRAWの大きく2つのデーターで画像情報を取り込めるわけです。 JPEGはすでに、搭載された画像エンジン等で処理されそのときの撮影条件等含めて、トーンとか彩度、WBが組み込まれた画像なんですよね?また、JPEGは画像データーを圧縮して保存するには最適な拡子なので簡単に扱いたいユーザーには便利。メール、Webで必要最低限度に変更するのも楽なものですよね? 逆にRAWは単語の意味の通りに素子で読み取られた画像情報のみで、彩度、トーン、WBは未調整の生データーなんですよね? で、これを付属の専用ソフトで見れるようにして、自分の好みの色合いにして最終的にはTIFFとかJPEGに変換して通常のデーターとするわけですよね?=画像エンジンが優れていれば、何もせずにJPEGデーターで入手可能なはず? でも、LAWはすばらしい?(PICTとか他の重たい画像データーとかは簡単に画質低下しないものもありますけどね、、。) で、肝心なことは、プロはともかく、アマチュアの私達にとってメリットがわかりません。 何か?メーカーがフィルムのように綺麗に再現できる能力がありません。何回か処置しても画像劣化させないデーターを新たに作りました。お好きなようにお使いください!と言うことなのでしょうか? 劣化しない?データーであるそうですが、消費者に取っての大きなメリットは何なのでしょうか?そこを解説している一般的な業界筋のコメントが見つかりませんでした。 どなたか?教えていただけないでしょうか?「プロを除く、またはプロ含めてRAWは我々に何のメリットをもたらせたのでしょうか?」 宜しくお願いします。

  • floatで保存したRAWファイルをImageMagickでconvertしたい

    0.0~255.0の輝度値で32ビットfloat型で保存したRAWファイルfloat.raw(256x4608)をImageMagickでconvertしてtifまたはgifファイルに変換したいのですが、うまくいきません。 convert -depth 32 -size 256x4608 gray:float.raw outimg.tif うまくいかないというのは、上のように実行してもImageMagickはエラーを返さず、 display outimage.tif の出力結果が意図していたものとは全然違うということです。 ちなみに、同じRAWファイルをプログラム処理して8ビットunsigned char型で保存したRAWファイルは、以下のコマンドでconvertでき、出力結果も正常です。 convert -depth 8 -size 256x4608 gray:unchar.raw outimg.tif どなたかお助けを~(>_<)

  • 多次元配列とポインタ渡しについて

    多次元配列のポインタ渡しについて,自分で検索したのですがあまりにも様々で具体的な記述が無く質問させていただきました. 検索力不足もあるのでソースの提示だけでも結構ですので,ご回答お願いいたします. OS:Windows XP ソフト:VisualStudio.net2003(C++) C++プログラミング暦2ヶ月弱です. データを変換して多次元配列にデータを入れる自作の関数をつくりたいと考えています. 具体的には,a1からa2,b1からb2を10区間に分けてたデータを配列にしたいといったものです. 自分で記述した関数は以下の通りです. void Convert(float a1,float a2,float b1,float b2,unsigned short *Data){ int k; float a; float b; for(k=0;k<11;k++){ a = a1 + (a2 - a1) / 10; b = b1 + (b2 - b1) / 10; Data[k][1] = ( powf(2.0,16) * (a + 10.0) / 20; Data[k][1] = ( powf(2.0,16) * (b + 10.0) / 20; } } void main(){ float a = 10; float b = 20; unsigned short Data[11][2]; Convert(a1,a2,b1,b2,Data); ... } としています. ここでコンパイルすると, "5番目の引数をunsigned shortからunsigned short *に変換できません" となってしまいます. 配列の名前のみの部分はその配列の先頭アドレスを示すポインタであることから,自分では間違いがないと思っているのですが….

  • RAWデータを請求する根拠

    趣味で写真撮影をしています 先日、写真を広告に使用したいと連絡を受けたのですが 現像処理を行ったjpeg画像(長辺3500px以上解像度300bpi)を納品したところ、RAWデータを寄越せと言われました。 こちらとしてはRAWは未現像の、あくまでもネガの状態のデータなので 何故それを要求されたのか?と疑問があります。 DTP業界ではRAWデータで無ければ困る事情があるのでしょうか また、RAWでの提供が一般的ですか? 自分としては、高解像度の画像を提供、レタッチ可としているのにRAWを請求されたことに、少々戸惑いを感じています。 現在この業界に身を置かれている方の、率直なご意見が伺えれば幸いです 相手に同様の質問をしたのですが、今ひとつ要点を得た回答も無かった為RAWの提供は断りましたが、 余り深く考える事でも無かったのでしょうか お時間ある時にお応え頂けたら幸いです

  • RAW画像の処理

    デジカメでRAW画像で保存してPSDファイルに変換する場合にPhotshopCS4でアクション処理でする場合どうすれば良いのでしょう また、RAW画像は1枚づつ現像して整理して行かないとダメでしょうか