您的位置:首页 > 运维架构

OpenCV3.1-OpenCL的使用

2016-10-18 17:47 260 查看
参考:

http://opencv.org/platforms/opencl.html

一、OpenCV-2.x 和 OpenCV-3.x使用区别

OpenCL-aware code OpenCV-2.x

// initialization
VideoCapture vcap(...);
ocl::OclCascadeClassifier fd("haar_ff.xml");
ocl::oclMat frame, frameGray;
Mat frameCpu;
vector faces;
for(;;){
// processing loop
vcap >> frameCpu;
frame = frameCpu;
ocl::cvtColor(frame, frameGray, BGR2GRAY);
ocl::equalizeHist(frameGray, frameGray);
fd.detectMultiScale(frameGray, faces, ...);
// draw rectangles …
// show image …
}


OpenCL-aware code OpenCV-3.x

// initialization
VideoCapture vcap(...);
CascadeClassifier fd("haar_ff.xml");
UMat frame, frameGray;
vector faces;
for(;;){
// processing loop
vcap >> frame;
cvtColor(frame, frameGray, BGR2GRAY);
equalizeHist(frameGray, frameGray);
fd.detectMultiScale(frameGray, faces, ...);
// draw rectangles …
// show image …
}

二、例子

备注:在OpeCV3.X中需要添加 ocl::setUseOpenCL(true); 才能正常调用OpenCL模块

1、CUP 不使用OpenCL


#include <stdio.h>
#include <iostream>

#include <opencv2/opencv.hpp>


using namespace std;
using namespace cv;
const string filename = "../data/lena.jpg";

int main(int argc, char **argv)

{

 // time

 int64 start=0,end=0;

 start = getTickCount(); 

 Mat img,gray;

 img = imread(filename, 1);

 cvtColor(img,gray,COLOR_BGR2GRAY);

 GaussianBlur(gray, gray, Size(7,7), 1.5);

 Canny(gray, gray, 0, 50);

 

 imshow("edges",gray);

 end = getTickCount();

 printf("time: %f ms\n", 1000.0*(end - start)/getTickFrequency());

 waitKey(0);

 return 0;

}

2、使用OpenCL模块

#include <stdio.h>

#include <iostream>

#include <opencv2/opencv.hpp>

//opencl

#include <opencv2/core/ocl.hpp>

using namespace std;

using namespace cv;

const string filename = "../data/lena.jpg";

int main(int argc, char **argv)

{

        // time

 ocl::setUseOpenCL(true);

 int64 start=0,end=0;

     start = getTickCount(); 

 UMat img,gray;  //

 //imread(filename, 1).copyTo(img);

        img = imread(filename, 1).getUMat(ACCESS_READ);

 cvtColor(img,gray,COLOR_BGR2GRAY);

 GaussianBlur(gray, gray, Size(7,7), 1.5);

 Canny(gray, gray, 0, 50);

 

 imshow("edges",gray);

        end = getTickCount(); 

        printf("time: %f ms\n", 1000.0*(end - start)/getTickFrequency());

 waitKey(0);

 return 0;

}

两段程序运行结果分别是:

CUP:



GPU:







                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: