【发布时间】:2021-12-30 23:06:26
【问题描述】:
假设我们有一些 OpenCV 常用的图像 Mat:
cv::Mat usual_image = cv::imread(...)
此图像作为 HWC/NHWC 数组存储在内存中。
如果可以将此图像作为 CHW/NCHW(从某种意义上说是分离的通道阵列)复制到 cuda 内存中而无需超高成本 cv::split?
仅用于可视化 HWC 和 CHW:
【问题讨论】:
-
可能。
cv::split是 cpu 端,因此很慢。 afaik 有cv::cuda::split(设备端),它应该便宜很多,而且可能还有办法在在传输期间进行转换。一些相关的配方:stackoverflow.com/questions/41637162/… 和 answers.opencv.org/question/191013/…——当你使用 opencv 的dnn模块时,它有各种“blob”方法可以解决这个问题 -
如果你有预分配的内存在你想写的地方,cv::cuda::split 会比cpu 版本更差。因为中间会存在cudamemalloc,开销很大。
标签: opencv image-processing cuda