Я правильно делаю средний фильтр? Что мне нужно изменить, чтобы это работало?

Проблема в том, что я не знаю, как правильно сделать математику при использовании среднего фильтра. Ядро 3х3 со значением веса 1 во всех 9 ядрах. Я получил некоторую помощь, чтобы использовать часть суммы, но я не знаю, работает ли она правильно, я, конечно, не могу построить.

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

-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, но вы на самом деле ничего не добавляете сюда.

Вы также начинаете цикл, читая за пределами изображения.

3

Другие решения

Как только вы получите его для сборки, у вас будут следующие ошибки:

Вы оставили персонажа в

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

Эти строки заменяют значение sum с новым значением.

Чтобы на самом деле сложить их вместе, сделайте

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

Вы также индексируете за пределами изображения — вам нужно обрабатывать случаи, когда x или же y 0 или их соответствующий максимум правильно.

И во внутреннем цикле, вы говорите y++ где ты должен сказать x++,

0

По вопросам рекламы [email protected]