【发布时间】:2018-06-13 22:16:11
【问题描述】:
我在项目上工作以在某些图像上应用 opencv 中的 meanshift,经过四五次尝试后出现此错误,我尝试了关闭配置等操作,但没有一个不起作用。任何帮助表示赞赏。我的 opencv 2.4.9,我的显卡是 NVIDIA GeForce 310。
OpenCV Error: Gpu API call (CL_INVALID_COMMAND_QUEUE) in openCLMemcpy2D, file /tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140617-1410/modules/ocl/src/cl_operations.cpp, line 227
[ERROR] [1405642960.704963701]: Exception thrown while processing service call: /tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140617-1410/modules/ocl/src/cl_operations.cpp:227: error: (-217) CL_INVALID_COMMAND_QUEUE in function openCLMemcpy2D
[ERROR] [1405642960.705466283]: Service call failed: service [/jur_segmentation_interaction] responded with an error: /tmp/buildd/ros-hydro-opencv2-2.4.9-2precise-20140617-1410/modules/ocl/src/cl_operations.cpp:227: error: (-217) CL_INVALID_COMMAND_QUEUE in function openCLMemcpy2D
=================> 代码
/// Applying MeanShift
cv::ocl::oclMat ocl_image;
cv::Mat res_mean;
// Converting to CV_8UC4
cv::Mat _img_conv;
cvtColor( _img , _img_conv , CV_BGR2BGRA );
ocl_image.upload(_img_conv.clone());
cv::ocl::meanShiftSegmentation( ocl_image.clone() , res_mean , _sp , _sr , _mean_size );
//cv::ocl::finish();
====================> opencl配置:
cv::ocl::DevicesInfo dev_info;
cv::ocl::getOpenCLDevices( dev_info );
/// Platform Info
cv::ocl::PlatformsInfo plat_info;
cv::ocl::getOpenCLPlatforms( plat_info );
cv::ocl::setDevice( dev_info[0] );
【问题讨论】:
-
正如其他人在stackoverflow.com/questions/24761665/… 上提到的那样,如果内核未正确执行,您可能会收到这样的错误。尝试在每个 clEnqueue* 操作之后添加 clFinish 以使其完成并查看错误是否更快出现,这将帮助您找到问题。否则开始删除或简化主机或设备代码以缩小原因。
-
正如我所说,我不直接使用 opencl,只是我使用了使用 opencl 的 meanshift 分割,我添加了我的代码,可能它有更多帮助。
-
我猜你没有正确地将数据传递给 opencl。不幸的是,我对meanshift几乎没有经验。那么meansize等呢?