【发布时间】:2019-05-15 08:04:30
【问题描述】:
我想找到 GPUMat 的平均像素值和标准偏差,并在 GPU 上进行此缩减,而不必下载图像并在 CPU 上计算平均值(因为这会在我的应用程序中大大减慢我的速度) .问题是,我正在处理的 GpuMat 图像是 32 位浮点数 - 但是 opencv documentation 声明
目前支持 CV_8UC1 矩阵
我编译下面的代码没有问题:
#include <opencv2/core/core.hpp>
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaarithm.hpp>
int main(int argc, char** argv)
{
cv::cuda::GpuMat img = cv::cuda::GpuMat(cv::Mat::zeros(cv::Size(kIWEWidth,kIWEHeight), CV_32FC1));
cv::Scalar mean, std;
cv::cuda::meanStdDev(img, mean, std);
}
但是,当我尝试实际执行此操作时,我遇到了
error: (-215:Assertion failed) src.type() == CV_8UC1 in function 'meanStdDev'
所以,我想知道是否有人知道是否可以在 meanStdDev 方法上编译具有 32 位浮点支持的 OpenCV,或者是否可以推荐任何替代方法。例如,我意识到我应该能够使用cuda::sum、cuda::subtract 和cuda::sqrSum 找到平均值。但这需要大量内核启动,在我的特殊情况下,每一微秒都很重要。
无论如何,提前感谢您的帮助!
【问题讨论】: