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
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:
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:
相关文章推荐
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别
- OpenCV3.1使用SIFT
- opencv 3.1 创建和使用SURF 的方法
- opencv3.1 svm(支持向量机)使用心得
- 使用OpenCV的OpenCL(ocl)模块
- 使用OpenCL+OpenCV实现图像旋转(二)
- 编译并使用带有OpenCL模块的OpenCV for android SDK
- mfc使用opencv3.1
- OpenCL+OpenCV使用环境配置
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenGL和OpenCV区别
- 使用OpenCV的OpenCL(ocl)模块
- 使用OpenCV的OpenCL(ocl)模块
- python3.5 使用pip安装opencv3.1 ImportError: DLLL load failed.
- OpenCV3.1 xfeatures2d::SIFT 使用
- 使用OpenCV的OpenCL(ocl)模块
- HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenGL和OpenCV区别
- 【转载】使用OpenCV的OpenCL(ocl)模块
- OpenCV3.1 xfeatures2d::SIFT 使用
- 使用OpenCL+OpenCV实现图像旋转(一)