我升级到OpenCV 3并使用UMat T_API OpenCL容器而不是Mat。
看起来像矩形(Mat img,...)等绘图功能没有UMat重载。我想尽可能在UMat世界中工作,无需将UMat转换回Mat进行绘图和显示。
有人能给我最有效的方法在UMat上绘制一个矩形吗?或者我是否必须转换回Mat来绘制并显示?
答案 0 :(得分:0)
不幸的是,如果不从GPU内存传输数据,就无法在UMat上绘制内容。 您可以使用以下方案来绘图:
cv::Mat draw_img = img.getMat(cv::ACCESS_WRITE);
cv::rectangle(draw_img, ...);
draw_img.release();
请注意,getMat(cv::ACCESS_WRITE)
需要同步。因此,为了获得GPU处理的最大好处,最好避免绘制操作或将其分组到一个块中。