【问题标题】:OpenCV : Normalized Box Filter SmoothingOpenCV:归一化箱滤波器平滑
【发布时间】:2016-11-21 12:25:38
【问题描述】:

我正在尝试使用 为我的图像做一个简单的平滑过滤器

我使用 OpenCV Blur

得到了我的预期结果
void blur()
{

   blur(image1, image2, cv::Size(3, 3));


   imshow("Orginal", image1);
   imshow("Filtered", image2);
   waitKey(0);
}

我还从 OpenCV: Understanding Kernel

但我想学习如何在不使用 OpenCV 功能的情况下进行过滤,但我在理解 将图像与某些内核卷积时遇到了一些问题

来自https://en.wikipedia.org/wiki/Kernel_(image_processing)

我尝试使用我目前所了解的知识,并 这是我的代码(“ 3x3 矩阵 ),但accumulator = image1.at<Vec3b>(x, y) * kernelarray[x + k][y + l]; 出现错误

  Mat image1 = imread("Balloon.jpg", CV_LOAD_IMAGE_ANYCOLOR);
  void filter(Mat image1)
 {
 const int kernelWidth = 3;
 const int kernelHeight = 3;

float kernelarray[kernelWidth][kernelHeight];

int accumulator;

for (int x = 0;x < image1.rows;x++) 

    for (int y = 0; y < image1.cols;y++) {

        accumulator = 0;

        for (int k = 0;k < 3;k++)
        {
            for (int l = 0;l < 3;l++)
            {
                accumulator = image1.at<Vec3b>(x, y) * kernelarray[x + k][y + l];

            }
            image1.at<Vec3b>(x, y) = accumulator;
        }
 }
}

我应该怎么做才能获得我想要的预期结果?

【问题讨论】:

    标签: c++ image opencv image-processing convolution


    【解决方案1】:

    图像中的卷积是一种操作,其中像素颜色根据该像素相邻像素的颜色而改变。每个像素(除了图像边缘)有 8 个邻居。如果将像素及其邻居放在矩阵中,则像素居中并相邻。

    您所做的是为每个邻居设置一个“权重”(如加权平均)。然后你只需将每个邻居乘以其权重的结果相加。中心像素也可以有自己的权重。这总共是 9 次乘法和求和。您将结果(在裁剪到 0-maxColor 范围后)分配给中心像素。

    当您想对图像中的所有像素进行此卷积时,通常您希望使用相同的权重。这 9 个权重组称为“内核”。不同的内核产生不同的结果。

    如果您将权重写在矩阵中,您会得到两个矩阵:像素及其邻居,以及所有矩阵的权重。但这只是一种代表。 这里不涉及矩阵运算

    您不仅可以使用 8 个邻居,还可以使用 22 个……然后您需要 23 个权重。

    在您的代码中,kernelarray 未填充权重。

    【讨论】:

    • 对不起,我不明白你的意思,我的内核只是 { { 1,1,1},{1,1,1},{1,1,1} }
    【解决方案2】:

    啊,用

    解决了
    for (int y = 1; y < src.rows - 1; y++) {
        for (int x = 1; x < src.cols - 1; x++) {
            sum = 0.0;
            for (int k = -1; k <= 1;k++) {
                for (int j = -1; j <= 1; j++) {
                    sum = sum + Kernel[j + 1][k + 1] * src.at<uchar>(y - j, x - k);
    

    显然用灰度比用彩色更容易平滑

    【讨论】:

      猜你喜欢
      • 2021-01-07
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 2018-08-23
      • 2014-10-24
      • 2020-08-23
      • 2014-07-14
      相关资源
      最近更新 更多