了解OpenCV图像平滑

时间:2013-05-20 15:49:02

标签: c++ image opencv image-processing

这个问题与本教程有关http://docs.opencv.org/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html#smoothing

在该代码中,所有平滑方法都在循环内运行MAX_KERNEL_LENGTH次。这个核心是什么?我真的不明白。请帮忙。

2 个答案:

答案 0 :(得分:3)

为了计算平滑,例如,计算最接近像素的平均值。此内核给出的像素数和数量。核心还包含关于像素加权的信息。

内核通常表示为矩阵(在这种情况下也是如此),该矩阵以每个像素为中心,其平均值被计算。伪c ++代码中的计算结果如下所示。

 for(int i=0;i<src.rows;i++){
     for (int j=0;j<src.cols;j++){
         dst[i][j]=0;
         for(int kernal_i=0;i<kernal.rows;i++){
             for (int kernal_j=0;j<kernal.cols;j++){
                  dst[i-kernal.rows+kernal_i][j-kernal.cols+kernal_j]+=
                      src[i-kernal.rows+kernal_i][j-kernal.cols+kernal_j]*
                      kernal[kernal_i][kernal_j];
             }
         }
     }
 }

提到MAX_KERNAL_LENGTH的变量只是创建一个这样的内核的矩阵的最大尺寸。

答案 1 :(得分:0)

MAX_KERNEL_LENGTH在代码中定义为常量(31)。它用于将内核大小从1x1更改为31x31,以显示本教程中使用的不同模糊算法中不同内核大小的影响。