• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++ 最適なメモリ確保)

C++で画像処理のための最適なメモリ確保方法

このQ&Aのポイント
  • C++で画像処理をする際に、最適なメモリ確保方法を知りたいです。現在、BMP画像の画素位置を保存するためのint型配列を作成しています。
  • 具体的には、malloc関数を使用して画像画素分のメモリ領域を確保し、画素座標を逐次保存していく方法を試しています。
  • しかし、メモリ確保のサイズを調整する際に、適切なサイズを設定することが難しく、クラッシュすることがあります。大目のメモリを確保すると動作はするものの、無駄なメモリ使用量になってしまいます。最適なメモリ確保方法を教えてください。

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

  • ベストアンサー
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

プログラムの内容がわからないので、推測ですが >入力画像の解像度は640x480 計算してみてください、307200画素となり100000では約1/3以上の画素が該当する場合に配列数をオーバーしてしまいます。 配列を使用しているのであれば、カウンタ変数があるはずなのでその変数を監視していればわかると思いますが。 >画像処理をするために実験的にC++でプログラムを書いています。 C++の場合、通常はメモリ確保にnewを使用します。 C言語との互換性のためにmallocも使用できるようになっていますが。 あと、よほど計算速度にシビアな処理でない限りSTLのvectorを使用した方が安全で簡潔なコードの記述が可能です。

Brown_neko
質問者

お礼

なるほど。やっぱり100000では足らないんですね。 勉強になりました。ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • s0832080
  • ベストアンサー率0% (0/2)
回答No.4

画像処理の研究をしているものです. int *img = (int *)malloc(sizeof(int)*640*480); とかならピッタリな気がしますが・・・. ただこの640や480という数字はおそらく,バイト単位で読み込むなりして ふつうは・・・ int *img = (int *)malloc(sizeof(int)*width*height); や int *img = (int *)malloc(sizeof(int)*cols*rows); としますね. ここで,widthは横幅,heightは高さ,colsは列数,rowsは行数を表す. さらに言うと本当は構造体などもちいますが・・・.本題ではないので略.

Brown_neko
質問者

お礼

行と列で分けずにした方がわかりやすそうですね。 ありがとうございます。

すると、全ての回答が全文表示されます。
  • DUDDLAY
  • ベストアンサー率66% (136/203)
回答No.3

Duddlay と申します。 BMP は、画像情報として先頭から 情報の構造体で彩度や画素数等が取得できます。 添付の URL でその詳細が記述されていますので、それを参考に malloc() してみて下さい。 ※サンプル記述は C ですが、C++ にそのまま置き換えても大丈夫でしょう。 http://www.kk.iij4u.or.jp/~kondo/bmp/ すみません、サンプルのコーディングは省かせて頂きます。 ご参考までに。

参考URL:
http://www.kk.iij4u.or.jp/~kondo/bmp/
Brown_neko
質問者

お礼

BMPについて詳しく知ることが出来ました。 ありがとうございます。

すると、全ての回答が全文表示されます。
回答No.2

Stackのサイズを実行前に決定できないのが問題なのであれば、 stack<pair<int,int>> stk; // pair<int,int>はpush/popしたいX,Yの組

Brown_neko
質問者

お礼

すみません。C++初心者でして、ちょと分からないです… でも、ご回答ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A