2013-10-29 14 views
-1

問題是我不知道如何在使用平均過濾器時正確地完成數學運算。所有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; 
} 
+0

爲什麼你不能建立?什麼是錯誤? –

回答

3
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,但你實際上並沒有在這裏添加任何。

您還可以通過閱讀圖像邊界之外的循環開始。

0

一旦你得到它的建設,你就會有這些缺陷出席:

您在

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

漏掉一個字。這些線路用新值替換的sum值。

要真正把它們加起來,做

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

你也索引圖像邊界之外 - 你需要處理情況xy是0或各自的最高正常。

而在內循環中,你說y++你應該說x++

相關問題