-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;
}
4

2 に答える 2

0

ビルドが完了すると、次のバグに対処する必要があります。

の文字を除外しました

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

sumこれらの行は、の値を新しい値に置き換えます。

実際にそれらを一緒に追加するには、次のようにします

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

また、画像の境界外にインデックスを作成しています。xまたはyが 0 またはそれぞれの最大値である場合を適切に処理する必要があります。

そして、内側のループでは、言うべきy++場所を言いx++ます。

于 2013-10-29T13:46:58.027 に答える