Top > OpenCV > Method used for oclMat on OpenCV 2.4.3

OpenCV/Method used for oclMat on OpenCV 2.4.3

概要

OpenCLを使った実装oclMatがOpenCV 2.4.3より追加されました.
ここではoclMatの基本的な使い方を説明します.詳細は公式ドキュメントを参照ください.
※以降の説明は事前にOpenCL開発環境が導入されていることが前提です.

使い方

OpenCVのビルド

OpenCVをCMakeを用いてビルドする.

  1. WITH_OPENCLにチェックを入れた後,「Configure」ボタンを押し,「Generate」ボタンを押す.
    cmake_with_opencl_0001.png


  2. OpenCVをビルドする.
  3. oclライブラリをプロジェクトに追加する.
    OSライブラリ名
    Windowsopencv_ocl243.lib
    Maclibopencv_ocl.dylib

基本的な流れ

  1. cv::ocl::getDevice関数をコールしてOpenCLデバイスを初期化
  2. oclMatのコンストラクタを使ってcv::Matからcv::ocl::oclMatに変換
  3. oclMatで用意されている画像処理関数をコール(サンプルコードではocl::resizeを使用)
  4. download関数を使ってcv::ocl::oclMatからcv::Matに変換

サンプルコード

fileoclmat_sample.cpp
/*
 * Abstract  : Sample of oclMat
 * File Name : oclmat_sample.cpp
 * Library   : OpenCV 2.4.3rc
 * Author    : dandelion
 * Date      : Oct 29, 2012; 14:55
 */

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/ocl/ocl.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(int argc, const char * argv[])
{
    /* input image */
    Mat mat_src = imread("lena.jpg", IMREAD_UNCHANGED);
    Mat mat_dst;
    if(mat_src.empty()) return -1;
    
    /* initialise of ocl */
    std::vector<ocl::Info> param;
    ocl::getDevice(param, ocl::CVCL_DEVICE_TYPE_GPU);

    /* cv::Mat --> cv::ocl::oclMat */
    ocl::oclMat oclmat_src(mat_src);
    ocl::oclMat oclmat_dst;
    
    /* operation of ocl */
    ocl::resize(oclmat_src, oclmat_dst, cvSize(mat_src.cols*1.5, mat_src.rows*1.5), 0, 0, CV_INTER_NN);

    /* cv::Mat <-- cv::ocl::oclMat */
    oclmat_dst.download(mat_dst);

    /* display image */
    namedWindow("src");
    imshow("src", mat_src);
    namedWindow("dst");
    imshow("dst", mat_dst);
    
    waitKey(0);
    destroyAllWindows();
    
    return 0;
}

注意点

  • OpenCLデバイスとCPU間の転送(upload,download)は遅いので呼び出しは必要最小限にする
  • OpenCL実装関数の初回実行は(kernelのコンパイル含むため)遅いので起動時にダミーとして呼んでおくと良い

Contact

間違い・御指摘等ありましたら,

mail.png

までメールにてご連絡ください.


リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Wed, 31 Oct 2012 00:32:10 JST (1611d)