簡體   English   中英

我的均值濾波器是否正確? 我需要更改使其工作嗎?

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

問題是我不知道在使用均值濾波器時如何正確地完成數學運算。 在所有9個內核中權重值為1的3x3內核。 我得到了一些使用總和部分的幫助,但是我不知道它是否正確運行,我當然無法構建。

#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++

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM