はじめに
最近ubuntu上でアプリを作成していたが、久しぶりにWindowsでOpen CVのアプリを作成した。
作成したアプリは、コンソール上では、問題なく動作するが、Visual Studioから実行するとエラーが生じる現象に遭遇しあせった。
環境
Windows 10 64bit proOSのバージョン記録し忘れ
OpenCVは、ここから3.3.1 Win packをダウンロードし展開したもの。
開発環境はVisual Studio 2015 Community edition
プログラムは、画像を表示させるだけの簡単なものであった。
昔と異なる点
・提供されている共有ライブラリが、opencv_world 331d.dll と opencv_world 331d.dll だけになっていたことpathを設定するのが手間だったので、この2つを c:\windows\system32のフォルダーにコピー
原因不明のエラー
普通にMatにカラー画像を読み込み、imshowで表示させるだけのプログラムであったが、なぜか、imshowのところで落ちてしまう。初めての現象に遭遇し、かなりあせった。昔のブログを見ても該当するものはなし。
エラーの画面をダンプし忘れたが、エラーメッセージをよく見ると、igdrcl64.dllが問題とのこと
google先生に尋ねたところ、Open CV のフォーラムにそれらしきものを発見。
対応策
#include <opencv2/core/ocl.hpp>ととプログラムの冒頭に
cv::ocl::setUseOpenCL(false);
を追加したら、エラーは、発生せず問題なく画像が表示できた。
微妙に環境が異なる他のWindowsPCでは発生せず、どの組み合わせが悪いかは、調査はしていない。他のPCでも再現したら、Advent のネタにしようかと考えたがやめにした。
メモ
専用のプロパティシートを作成しておくライブラリの指定は、
#if _DEBUG
#pragma comment(lib, "opencv_world331d.lib")
#else
#pragma comment(lib, "opencv_world331.lib")
#endif
でOK
私の環境でも同様の現象が起きたので調べてみました。記事にあるリンクにはグラフィックスドライバをアップグレードすると改善したとありますね。ただし、私の環境ではアップグレードがうまくいかなかったので以下のフォーラムにある方法で回避できました(ICD loaderでIntel側のOpenCLを無視するようにする設定)。
返信削除https://software.intel.com/en-us/forums/opencl/topic/705036