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 件のコメント:
コメントを投稿