在以下代码中使用OpenCV TAPI(cv::UMat
)时出现断言失败:
for (int i = 0; i < N; ++i) {
cv::extractChannel(img_vec[i], alpha_vec[i], 3);
cv::cvtColor(img_vec[i], img_vec[i], CV_BGRA2BGR);
}
代码在第五次迭代中崩溃,就在运行cv::cvtColor(img_vec[i], img_vec[i], CV_BGRA2BGR)
之后。
输出消息是:
OpenCV错误:断言失败(clEnqueueReadBuffer(q, (cl_mem)u-&gt; handle,CL_TRUE,0,u-&gt; size,alignedPtr.getAlignedPtr(),0, 地图,文件中的0,0)== CL_SUCCESS) C:\ OpenCV-3.1.0 \ sources \ modules \ core \ src \ ocl.cpp,第4758行
此应用程序已请求运行时将其终止 不寻常的方式请联系应用程序的支持团队获取更多信息 信息。抛出一个实例后终止调用 &#39; CV ::异常&#39;什么(): C:\ OpenCV-3.1.0 \ sources \ modules \ core \ src \ ocl.cpp:4758:错误:( - 215) clEnqueueReadBuffer(q,(cl_mem)u-&gt; handle,CL_TRUE,0,u-&gt; size, alignedPtr.getAlignedPtr(),0,0,0)==功能映射中的CL_SUCCESS
只有大图像(> 20Mp)才会发生。如果我不使用TAPI(cv::Mat
)或禁用OpenCL(cv::ocl::setUseOpenCL(false)
),则代码正常工作。我使用的是3.1.0版本。
为什么会这样?有没有办法让它支持GPU?