我想使用OpenCL加速我的OpenCV程序,所以我尝试使用OpenCV的透明API。
系统信息
问题描述
当我尝试使用透明API cv :: UMat时,没关系。但我发现执行时间比简单地使用Mat更长。
然后我发现ocl::haveOpenCL()
返回 false ,并且ocl::getPlatfomsInfo(platforms)
抛出错误消息错误:( - 220)OpenCL函数不可用:[clGetPlatformIDs]在函数opencl_check_fn
代码段
#include <opencv2/core/core.hpp>
#include <opencv2/core/ocl.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <ctime>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
ocl::setUseOpenCL(true);
vector<ocl::PlatformInfo> platforms;
try {
ocl::getPlatfomsInfo(platforms);
}
catch (cv::Exception& e)
{
const char* err_msg = e.what();
std::cout << "exception caught: " << err_msg << std::endl;
}
if (!ocl::haveOpenCL()) {
std::cout << "OpenCL is not available..." << std::endl;
}
std::clock_t start;
double duration;
UMat uimg,ugray;
imread("test.jpg", 1).copyTo(uimg);
start = std::clock();
cvtColor(uimg, ugray, COLOR_BGR2GRAY);
GaussianBlur(ugray, ugray, Size(7, 7), 1.5);
Canny(ugray, ugray, 0, 50);
duration = (std::clock() - start) / (double)CLOCKS_PER_SEC;
Mat ugray_r = ugray.getMat(ACCESS_RW);
Mat img, gray;
img = imread("test.jpg", 1);
start = std::clock();
cvtColor(img, gray, COLOR_BGR2GRAY);
GaussianBlur(gray, gray, Size(7, 7), 1.5);
Canny(gray, gray, 0, 50);
duration = (std::clock() - start) / (double)CLOCKS_PER_SEC;
imshow("edges", gray);
waitKey();
return 0;
}
我认为我的环境或OpenCV构建可能有问题。但是OpenCL.dll
和OpenCL64.dll
可以在CUDA Toolkit目录下找到。任何人都可以给我任何关于我必须检查的建议吗?
顺便说一句,我发现在OpenCV 3中使用OpenCL的细节信息很少,有关如何在OpenCV中构建,配置或使用OpenCL的任何有用信息都表示赞赏。