OpenCV介绍:
OpenCV(Open Source Computer Vision Library)是一个基于BSD许可开源发行的跨平台计算机视觉库。实现图像处理和计算机视觉方面的很多通用计算。
OpenCV-OpenCL加载:
Opencv3.1架构添加新的概念transparent API(T-API)去允许opencl加速。相比之前旧版本,更简单的使用OpenCL。如果想要OpenCV下调用OpenCL。需要将transparent API 下定义UMat数据结构替换旧版本的Mat数据结构。
下面将讲解sobel算法如何使用OpenCL加速
首先定义UMat变量存储每一帧图像,通过相机采集图像,读取到当前帧,经过cvColor将原图转变为灰度图像,再进行sobel算法,最后循环显示出当前帧。默认是启用opencl,当按下键盘上'c'按键时,将关闭opencl的使用。具体代码如下:
UMat frame, grad, src_gray;
UMat grad_x, grad_y;
UMat abs_grad_x, abs_grad_y;
VideoCapture capture(1);
if(!capture.isOpened()){
cerr << "open fail !n" << endl;
return 1;
}
while(1) {
capture >> frame;
if (frame.empty())
break;
cvtColor(frame, src_gray, COLOR_RGB2GRAY);
Sobel(src_gray, grad_x, CV_16S, 1, 0, 3, 1, 0, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
Sobel(src_gray, grad_y, CV_16S, 0, 1, 3, 1, 0, BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y);
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
imshow("Sobel", grad);
char key = (char)waitKey(30);
switch (key) {
case 27: //escape key
return 0;
case 'c':
cv::ocl::setUseOpenCL(!ocl::useOpenCL());
default:
break;
}
}