2012-01-03 10 views
0

抽出されたキャラクタビットマップ(.bmpファイル)をC++で処理して人工ニューラルネットワークに入力できる何らかの種類の行列にフィードしたいとします。ネットワークは72個の入力を取ります - それぞれが6 x 12の二値化されたピクチャのピクセルとして取り込まれます。ビットマップをC++(ANN)で処理できる「行列」に変換する方法は?

例:私は40 x 80のサイズの2進化されたビットマップを持っています。構造体は6×12の次元を持ち、それは私のスケーリングされたビットマップで構成されます。ですから、私はbmpsを拡大してANNに送り込むことができるビットマップライブラリが必要です。 (あなたがすでに述べたように、それらは既に非常に親密なマトリックスとして保存されるため、変換は必要ありません)

ここでは何が使えますか?

+0

でしょうか?ファイルを開くには?データを読むには?あなたのANNライブラリが期待するどんなフォーマットにでもデータを変換するには?もっと正確にしてください。複数の問題がある場合は、複数の質問を開くことができます。実際の問題の数を可能な限り1に近づけるためにこれを行います。 – moooeeeep

+0

@moooeeeep私は自分の質問を更新しました。それが良いかどうか見てください。 – Patryk

+0

Xの6番目のピクセルとYのすべての3番目のピクセルを取ります。エレガントではありませんが、より良い解決ソリューションを見つけるまで、最初のパスとして機能します。 –

答えて

2

あなたのニーズに合った画像処理ライブラリがあるようです。ですから、私の助言は、できるだけシンプルなライブラリを使用してビルドプロセスに統合することです。 このコンテキストでは、CImgライブラリはシンプルな.hファイルで構成されているため、非常に簡単です。

あなたの必要性については、可能な実装は正確にあなたの問題が何であるか、そう

#include "CImg.h" 
using namespace cimg_library; 

int main(int argc,char **argv) 
{ 
    CImg<unsigned char> image("img/logo.bmp"); 

    //Simple resize with nearest neighbour interpolation 
    //image = image.resize(64, 64); 

    //If you want to specify the interpolation type 
    image = image.resize(64, 64, -100, -100, 4);//The last param specifies the interpolation type 
    //\param interpolation_type Method of interpolation : 
    // -1 = no interpolation : raw memory resizing. 
    // - 0 = no interpolation : additional space is filled according to \p border_condition. 
    // - 1 = nearest-neighbor interpolation. 
    // - 2 = moving average interpolation. 
    // - 3 = linear interpolation. 
    // - 4 = grid interpolation. 
    // - 5 = bicubic interpolation. 
    // - 6 = lanczos interpolation. 

    CImgDisplay main_disp(image,"Image resized"); 

    //This last part of code is not usfeul for you, it is only used to display the resized image 
    while (!main_disp.is_closed()) 
    main_disp.wait(); 
    return 0; 
} 
+0

ちょっと、このlibにはありがたいですが、それでも実行できません。私は未処理の例外を取ります: '+ \t \t _message \t 0x00322ba8 [インスタンス(0,0,0,0,00000000、非共有)] CImg :: load_bmp():無効なBMPファイル 'try。 bmp ' \t char [16384] 'とthis [image link](http://img15.imageshack.us/img15/3940/61319346.png) 他のライブラリの画像を置く作業ディレクトリにbmpを置いています。 – Patryk

+0

私はそれを修正しました - ライブラリに問題があります - それは8ビットのビットマップと協力することはできません:/彼らはすぐにそれを修正することを願っています。 – Patryk

0

ビットマップファイル形式(the specsを参照)は、ビットマップを行列、より正確にはピクセル単位で格納しています。これは、行単位(または列単位)に分割できますが、重要ではありません。

したがって、ヘッダーを読み取ってイメージサイズを取得し、パックstructhereのようにパディングなし)の配列でデータを読み取るだけです。

このようにして、行列を取得し、幅と高さの属性を格納するクラスにラップしたり、パーソナルフレーバ行列のコンストラクタに配列を渡したりすることもできます。

0

データにアクセスするには、いくつかの種類のbmp libを使用します(プラットフォームに依存)。これは通常、フラットな配列としてbmpを与えます。そのフラットな配列をとり、各値を行列構造に挿入するか、直接NNコードに渡します。あなたより多くの情報なしでこれ以上のものを提供することはできません。

関連する問題