我做的平均过滤器是否正确?我需要更改什么才能使其正常工作
Am I doing the mean filter correct? What do i need to change to make it work?
问题是我不知道在使用平均过滤器时如何正确完成数学运算。 3x3 内核,在所有 9 个内核中权重值为 1。我得到了一些帮助来使用总和部分,但我不知道它是否正常工作,我当然无法构建。
#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++
.
相关文章:
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++,()运算符重载,它的工作是什么
- 虚函数如何工作,分配后新的返回类型会发生什么?
- 我的C++程序的工作目录是什么
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 什么是__builtin_operator_new及其工作原理?
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- 我需要做什么才能使ZMQ_RADIO/ZMQ_DISH正常工作?
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- PRNG种子到底是什么,它在c ++中是如何工作的?
- 在 Xcode 中工作的 CMake 中启用地址清理器的正确方法是什么
- 在Qt中使用工作线程将数据写入文件的正确方法是什么?
- SetItemIcon() 在 Mac 10.13 上停止工作,有什么替代方案
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 其中一些工作而另一些工作无效的确切原因是什么?
- 如果我将作品张贴到线程池,并且线程已经在Boost中工作,会发生什么
- 该代码将如何工作以及输出的输出是什么
- 在 c++ 的文件处理中什么是 tellg(),它是如何工作的?