OpenCV的gpu模块提供了有cuda实现的很多并行函数,但有时候需要自己写并行函数并与已有的opencv函数结合使用,而opencv是一个开源的函数库,我们可以很轻松的看到其内部的实现机制,可以根据他已有的函数比葫芦画瓢来写一个自己的cuda并行函数。
所需要使用的gpu的关键的类有:GpuMat 和 PtrStepSz这两个类。 其中GpuMat主要是用于将内存中的数据上传到现存中,而PtrStepSz是用做gpu核函数的参数。
1、首先,设计自己的核函数,参数可以是自己定义的类型也可以是PtrStepSz,一般选择后者,因为opencv重载了GpuMat强制类型转换函数。
2、调用,初始化自己的GpuMat使用upload函数,然后用强制类型转换,将其转为PtrStepSz<**>类型,设置grid和block,最后调用核函数, 结束后调用cudaFree释放自己申请的资源。
3、最后调用GpuMat的download函数,返回自己处理完的矩阵。