2017年12月1日金曜日

久しぶりに Windows上でOpenCVのアプリを作成したらigdrcl64.dllがエラーをはいた。

はじめに


最近ubuntu上でアプリを作成していたが、久しぶりにWindowsでOpen CVのアプリを作成した。
作成したアプリは、コンソール上では、問題なく動作するが、Visual Studioから実行するとエラーが生じる現象に遭遇しあせった。

環境

Windows 10 64bit pro
 OSのバージョン記録し忘れ

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

1 件のコメント:

  1. 私の環境でも同様の現象が起きたので調べてみました。記事にあるリンクにはグラフィックスドライバをアップグレードすると改善したとありますね。ただし、私の環境ではアップグレードがうまくいかなかったので以下のフォーラムにある方法で回避できました(ICD loaderでIntel側のOpenCLを無視するようにする設定)。
    https://software.intel.com/en-us/forums/opencl/topic/705036

    返信削除