我是靠谱客的博主 洁净乌冬面,最近开发中收集的这篇文章主要介绍opencv(Python/c++):滤波(方框滤波,均值滤波,高斯滤波,中值滤波,双边滤波),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Python中的滤波体现在cameo项目,到时候再移植一下。
什么是图像滤波?
图像滤波,是指保留图像细节特征的条件下对目标图像的噪声进行抑制,称之为图像平滑化或者滤波
滤波分为线性滤波和非线性滤波:
- 线性滤波:方框滤波,均值滤波,高斯滤波
- 非线性滤波:中值滤波(能够去除脉冲噪声,椒盐噪声同时又能够保留图像的边缘细节),双边滤波(可以做边缘保存)
其中高斯低通就是模糊,高通就是锐化
正态分布就是高斯分布。
通常在滤波的过程中,很重要的概念是“核” 。 ksize也就是内核的大小
c++代码
1)线性滤波
特别注意:高斯滤波的size必须为正数和奇数
线性滤波c++代码
#include <iostream>
#include <opencv/cv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
//主函数
int main(void)
{
//读取原始图像
Mat srcImage=imread("/home/liuxin/桌面/opencv/dog.jpeg");
imshow("original",srcImage);
//进行滤波
Mat boxfilter,meanFilter,gaussFilter;
boxFilter(srcImage,boxfilter,-1,Size(6,6));//方框滤波;depth=-1,表示和原图像一致
blur(srcImage,meanFilter,Size(6,6));//均值滤波
GaussianBlur(srcImage,gaussFilter,Size(5,5),0,0);//高斯滤波的size必须为正数和奇数
//显示结果
imshow("boxfilter",boxfilter);
imshow("meanFilter",meanFilter);
imshow("gaussFilter",gaussFilter);
while(1)
{
int key=cvWaitKey(10);
if (key==27)
{
break;
}
}
return(0);
}
2)非线性滤波
效果图
,注:最左边为双边滤波,中间为中值滤波,最右边为原图
medianblur中的ksize必须为大于1的奇数
非线性滤波c++代码
#include <iostream>
#include <opencv/cv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
//主函数
int main(void)
{
//读取原始图像
Mat srcImage=imread("/home/liuxin/桌面/opencv/dog.jpeg");
imshow("original",srcImage);
//进行滤波
Mat mediafilter,bilateralfilter,gaussFilter;
medianBlur(srcImage,mediafilter,7);//中值滤波
bilateralFilter(srcImage,bilateralfilter,25,25*2,25/2);//双边滤波
//显示结果
imshow("mediafilter",mediafilter);
imshow("bilateralfilter",bilateralfilter);
while(1)
{
int key=cvWaitKey(10);
if (key==27)
{
break;
}
}
return(0);
}
最后
以上就是洁净乌冬面为你收集整理的opencv(Python/c++):滤波(方框滤波,均值滤波,高斯滤波,中值滤波,双边滤波)的全部内容,希望文章能够帮你解决opencv(Python/c++):滤波(方框滤波,均值滤波,高斯滤波,中值滤波,双边滤波)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复