下面我将为您详细讲解C++实现中值滤波的示例代码的完整攻略。
什么是中值滤波?
中值滤波是一种基本的数字图像处理方法,它是一种非线性滤波器,可以消除图像中的噪声,保持边缘细节。中值滤波的原理是对滤波器窗口中的像素点进行排序,然后取中间的数值作为滤波结果。通常情况下,中值滤波器的窗口大小是一个奇数,如3×3、5×5等等。
C++中值滤波示例代码
在C++中实现中值滤波可以使用OpenCV库,以下是示例代码:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img=imread("lena.jpg");//读取图片
if(img.empty())
return -1;
imshow("Original",img);
Mat dst;
medianBlur(img,dst,5);//中值滤波,窗口大小为5x5
imshow("Blur",dst);
waitKey();
return 0;
}
以上代码使用了OpenCV库中的medianBlur函数实现了中值滤波,其中第一个参数为输入图像,第二个参数为输出图像,第三个参数为滤波器窗口的大小。
例子1:展示中值滤波处理前后的图像
下面的示例代码展示了如何用C++实现中值滤波,并利用imshow函数展示中值滤波处理前后的图像。
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
Mat img=imread("lena.jpg");//读取图片
if(img.empty())
return -1;
imshow("Original",img);
Mat dst;
medianBlur(img,dst,5);//中值滤波,窗口大小为5x5
imshow("Blur",dst);
waitKey();
return 0;
}
运行以上代码,就可以展示中值滤波处理前后的图像。
例子2:在视频中实时应用中值滤波
利用C++和OpenCV库,可以在实时视频中应用中值滤波。以下是示例代码:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap(0);//打开默认摄像头
if(!cap.isOpened())
return -1;
while(true)
{
Mat frame;
cap>>frame;//读取视频帧
Mat dst;
medianBlur(frame,dst,5);//中值滤波,窗口大小为5x5
imshow("Blur",dst);//展示中值滤波处理后的帧
if(waitKey(30)==27)
break;
}
return 0;
}
以上代码打开默认摄像头,读取实时视频帧,在每个帧上应用中值滤波,并在窗口中展示中值滤波处理后的帧。如果按下“ESC”键,则退出程序。
以上就是本次对C++实现中值滤波的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现中值滤波的示例代码 - Python技术站