首页 > 解决方案 > 如何获取从 OpenCV getGaussianKernel 返回的 Mat 的实际内核值?

问题描述

我目前正在尝试使用 CUDA 在图像上实现自定义大小的 M*N 高斯模糊。

我打算用 OpenCV getGuassianKernel 得到一个 M*1 内核并执行 CUDA 垂直高斯模糊操作,然后再获取另一个 1*N 内核并执行另一个 CUDA 水平高斯模糊操作。

如何检索内核中的实际浮点值?我只是尝试了以下方式,行为似乎很奇怪:

Mat kernel= getGaussianKernel(3, -1);

cout << kernel<< endl;   //yields[0.25,5,0.25]

vector<float> kernel_vector;
for (int i = 0; i < kernel.rows; ++i) {
    kernel_vector.insert(kernel_vector.end(), kernel.ptr<float>(i), kernel.ptr<float>(i)+kernel.cols);
}
for(auto i : kernel_vector){
    cout << i << endl;   //yields[0,0,0]
}

标签: c++opencvgaussianmat

解决方案


默认情况下,cv::getGaussianKernel返回 aMat类型CV_64FC1,因此您需要像这样访问它:

kernel.at<double>(i,j);

为了清楚起见,我通常使用Mat_<T>

Mat1d kernel = getGaussianKernel(...);

并像这样访问它:

kernel(i,j);

推荐阅读