[英]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);
您还要在图像边界之外建立索引-您需要正确处理x
或y
为0或它们各自的最大值的情况。
在内部循环中,您说y++
,而应该说x++
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.