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; } } |