在C++中使用OpenCV对输入的8位灰度图像进行滤波,可以实现几种常用的滤波方法,比如均值滤波、高斯滤波和中值滤波。以下是每种方法的实现示例代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
// 读取灰度图像
Mat img = imread("input_image.jpg", IMREAD_GRAYSCALE);
if (img.empty()) {
cout << "Error loading image!" << endl;
return -1;
}
// 均值滤波
Mat meanFiltered;
int kernelSize = 5; // 核大小
blur(img, meanFiltered, Size(kernelSize, kernelSize));
// 高斯滤波
Mat gaussianFiltered;
double sigmaX = 1.0; // X方向标准差
GaussianBlur(img, gaussianFiltered, Size(kernelSize, kernelSize), sigmaX);
// 中值滤波
Mat medianFiltered;
medianBlur(img, medianFiltered, kernelSize);
// 显示结果
imshow("Original Image", img);
imshow("Mean Filtered Image", meanFiltered);
imshow("Gaussian Filtered Image", gaussianFiltered);
imshow("Median Filtered Image", medianFiltered);
waitKey(0); // 等待按键关闭窗口
return 0;
}
说明:
- 均值滤波 (
blur
函数): 使用指定大小的核计算每个像素周围区域的平均值。 - 高斯滤波 (
GaussianBlur
函数): 使用高斯函数加权计算邻域像素,具有更好的平滑效果。 - 中值滤波 (
medianBlur
函数): 用于去除噪声,尤其是椒盐噪声,通过取邻域像素的中间值来替代当前像素。
注意:
- 确保已安装OpenCV库,并在编译时链接相应的库。
- 将
"input_image.jpg"
替换为你自己的图像文件路径。
内容由零声教学AI助手提供,问题来源于学员提问