我做的平均过滤器是否正确?我需要更改什么才能使其正常工作

Am I doing the mean filter correct? What do i need to change to make it work?

本文关键字:什么 工作 常工作 过滤器 是否      更新时间:2023-10-16

问题是我不知道在使用平均过滤器时如何正确完成数学运算。 3x3 内核,在所有 9 个内核中权重值为 1。我得到了一些帮助来使用总和部分,但我不知道它是否正常工作,我当然无法构建。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
    Mat gray_image, convolued_image;
    gray_image = imread( "C:/1.jpg", CV_LOAD_IMAGE_GRAYSCALE);   // Read the file
    convolued_image = gray_image;

    if(!gray_image.data )                                     // Check for invalid input
    {
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }
    namedWindow( "RGB Input", CV_WINDOW_AUTOSIZE );    
    imshow( "RGB Input", gray_image );                 

     Mat meanImg;
       gray_image.copyTo(meanImg);
      namedWindow( "meanImg", CV_WINDOW_AUTOSIZE );    
    imshow( "meanImg", meanImg );  

        waitKey(0);    
        for (int y = 0; y < gray_image.rows; y++)
       {
               for (int x = 0; x < gray_image.cols; y++)
              {
                      int intesity = gray_image.at<uchar>(y,x);       
                      int sum = gray_image.at<uchar>(y+1,x+1);
                            sum = gray_image.at<uchar>(y+1,x);
                            sum = gray_image.at<uchar>(y+1,x-1);
                            sum = gray_image.at<uchar>(y,x-1);
                            sum = gray_image.at<uchar>(y,x+1);
                            sum = gray_image.at<uchar>(y-1,x-1);
                            sum = gray_image.at<uchar>(y+1,x);
                            sum = gray_image.at<uchar>(y+1,x+1);
                    int mean = sum/9;
                meanImg.at<uchar>(y,x) = mean;

              }
       }

    return 0;
}
sum = gray_image.at<uchar>(y+1,x);
sum = gray_image.at<uchar>(y+1,x-1);
sum = gray_image.at<uchar>(y,x-1);

您的变量名为 sum ,但您实际上并没有在此处添加任何内容。

您还可以通过图像边界之外的读取来开始循环。

一旦你开始构建它,你将有以下错误需要注意:

你遗漏了一个角色

sum = gray_image.at<uchar>(y+1,x);

这些行将sum的值替换为新值。

要将它们实际加在一起,请执行

sum += gray_image.at<uchar>(y+1,x);

您还在图像边界之外编制索引 - 您需要正确处理xy为 0 或其各自最大值的情况。

在内部循环中,您说y++应该说x++.

相关文章: