用opencv 重写 halcon 算子SmoothFunct1dGauss(Mat Function, double Sigma, Mat& SmoothedFunction)
时间: 2024-03-12 14:46:49 浏览: 241
以下是用OpenCV重写Halcon算子SmoothFunct1dGauss(Mat Function, double Sigma, Mat& SmoothedFunction)的代码:
```c++
#include <opencv2/imgproc.hpp>
void smooth_funct_1d_gauss(const cv::Mat& input_array, double sigma, cv::Mat& output_array)
{
// 生成高斯核
int window_size = cv::saturate_cast<int>(3.0 * sigma * 2 + 1);
cv::Mat kernel = cv::getGaussianKernel(window_size, sigma, CV_32F);
// 沿x方向卷积
cv::sepFilter2D(input_array, output_array, -1, kernel, cv::Mat(), cv::BORDER_REPLICATE);
}
```
在该函数中,我们首先根据输入的标准差计算高斯核的大小,然后使用`cv::getGaussianKernel()`函数生成高斯核。接着,我们调用`cv::sepFilter2D()`函数对输入的一维数组进行高斯平滑卷积操作,其中`-1`表示输出数组和输入数组具有相同的数据类型,`cv::Mat()`表示不使用y方向的卷积核,`cv::BORDER_REPLICATE`表示在边缘处进行复制填充。
需要注意的是,由于OpenCV中的卷积操作默认使用反向卷积,与Halcon的正向卷积不同。如果需要与Halcon保持一致,可以使用`cv::flip()`函数将卷积核进行翻转。
阅读全文