2013年11月15日金曜日

OpenCV 2.4.7でOpenCLを試してみた 1

2.4.7からOpenCVをビルドしなくてもOpenCLが利用できるようになっている。

1 準備
最初に自分の環境あったデバイスのOpenCL SDKをインストールしておく

GPUを所持していないので、Intel版で試す。
IntelのSDKは、ここからダウンロードする。


注意
Visual studio 2010 Express Editionを使用しているとき、インストール途中のVisual studio 2010のチェックをはずすこと


2 動作テスト
sources\samples\oclにサンプルのコードがあるが、テストプログラムを作成

OCL関連のヘッダーとライブラリを加える

#include <opencv2/ocl/ocl.hpp>
#pragma comment(lib,"opencv_ocl247d.lib")


ソース(コアのみ)

int main(int argc, char** argv)
{
cv::Mat matIn = cv::imread("c:\\hoge.png"), matDisp;
cv::imshow("Color", matIn);

cv::ocl::oclMat oclIn(matIn), oclOut;

cv::ocl::cvtColor(oclIn, oclOut, cv::COLOR_BGR2GRAY);

oclOut.download(matDisp);

cv::imshow("Gray",matDisp);

cv::waitKey(0);

return 0;
}

テストプログラムでは、白黒に変換している。

起動すると、絵が表示されるまでに10秒近く時間がかかる。


注意
  • OCLは、実行時に環境にあわせたカーネルソースがバイナリにコンパイルされるため、オーバヘッドが大きいので、よく使用する関数は、起動時にダミーを呼んでおくのがよいそうだ。
  • メモリーと対象デバイス間の転送時間がかかるため、サイズの大きい画像でないとメリットはない
  • ネットには事前に、ocl::getDeviseを呼ぶようにとかかれたものがあるが、2.4.7では必要ないし、そのような関数はなくなっている

追加11/15 17:50 未確認
 当方の環境 OpenCL対応デバイスが、Intel CPUのみなので初期化が不要であったが、グラフィックスボードを追加し、ボードに対応したOpenCL SDKをインストールした場合には、ocl::setDeviceを呼ぶ必要があるかもしれない



関連ドキュメント

0 件のコメント:

コメントを投稿