中将の研究日誌

2009-07-24

[] OpenCV 64 bit のビルド (Visual Studio 2008 sp1)

どう逆立ちしてもやっぱりメモリが足りないっぽいので 64bit 環境に挑戦。色々ハマッたのでハマり所をメモ。ちなみに動作確認までは行っていません。

  • 解決方法
    • 関数 icvHoughLinesProbabalistic の最適化でエラーが出る(64bit環境では最適化onになるよう定義されている?)ので、以下のように関数前後の定義で最適化がoffになるようにする

#pragma optimize("", off)

icvHoughLinesProbabalistic 本体

#pragma optimize("", on)



[] OpenMPOpenCVビルド (Visual Studio 2008 Standard sp1)

まぁ、前述の64bitバージョンのコンパイル時に先にハマったのはこっちの問題だったんですが、よく調べると別の問題だったので別エントリに。これもまだ動作確認まではしてません。

  • 問題
    • VS2008(Standard 以下)には omp.h 他 OpenMP 対応ヘッダ類が入ってない。

2009-05-19

[] fstream eof()とread()の挙動

こちらのページ(【C/C++】ifstreamのeofメンバ関数(違和感がある挙動): 日々此精進)と全く同じ挙動を確認。VCでもgccでも確認したので、これはSTLの仕様ぽい。

いままで全然気がつかなかったんですが、10000個しかデータが入ってないハズが何故か10001個読み込んでいたことが今更わかって、上から下までチェックしなおす羽目になってうんざり。

結局今までこんな風に書いていたところを

ifstream ifs( ファイル名, ios::in | ios::binary );

while( !ifs.eof() ) {

ifs.read( (char*)変数, sizeof(変数) );

}

以下みたいに書き直したらとりあえず意図通りに動くようにはなった模様。

ifstream ifs( ファイル名, ios::in | ios::binary );

while( ifs.read( (char*)変数, sizeof(変数) ) ) {

ほげほげ;

}