我要升级到OpenCV 3,并使用UMat T_API OpenCL容器而不是Mat。

似乎矩形(Mat img,...)之类的绘图函数没有UMat重载。我想尽可能地在UMat Realm 工作,以便在框架上进行绘制,而不必将UMat转换回Mat进行绘制和显示。

谁能给我最有效的方法来在UMat上绘制矩形?还是我必须转换回Mat才能进行绘制和显示?

最佳答案

不幸的是,如果不从GPU内存传输数据,就无法在UMat上绘制内容。
您可以使用以下方案来绘制图纸:

cv::Mat draw_img = img.getMat(cv::ACCESS_WRITE);
cv::rectangle(draw_img, ...);
draw_img.release();

请注意,getMat(cv::ACCESS_WRITE)需要同步。因此,为了获得GPU处理的最大利益,最好避免绘图操作或将其分组为一个块。

10-01 17:02