#include "stdafx.h"
#include "ImageFiltering.h"
using namespace cv;
ImageFiltering::ImageFiltering()
{
}
ImageFiltering::~ImageFiltering()
{
}
void ImageFiltering::openCV_bilateralFilte(Mat src, Mat &dst)
{
// 双边滤波
// 双边滤波器可以很好地减少不需要的噪声同时保持边缘的锐利。然而它的代价是速度比较慢
// 双边滤波的两个sigmaColor、sigmaSpace值越大,滤波效果越明显,滤波后的图片也越像“卡通图片”
// sigmaColor的值越大,就能混合邻域内像素值相差越大的像素点。
// sigmaSpace 控件滤波器,值越大,邻域内的两个像素相互影响就越大。
// d 滤波器的size——(d > 5)会非常慢,因此,在实时性较高时,建议size设为d = 5;d的值越大模糊效果越明显
// 如果实时性不是那么高,可以将size——(d = 9)设置大一些。
// borderType 差值方式。
// 注:当d大于0时,忽略sigmaSpace
bilateralFilter(src,dst,9,150,0,BorderTypes::BORDER_CONSTANT);
}
// 归一化的均值滤波器
void ImageFiltering::openCV_blur(Mat src, Mat &dst)
{
blur(src, dst, Size(7, 7), Point(-1, -1));
}
// 一般性的均值滤波器
void ImageFiltering::openCV_boxFilter(Mat src, Mat &dst)
{
boxFilter(src, dst, src.depth(), Size(7, 7),Point(-1,-1),true);
}
void ImageFiltering::openCV_buildPyramid(Mat src, std::vector<Mat> &dst)
{
// 对一副图像进行金字塔层积采样,采样层数由参数maxlevel决定
buildPyramid(src, dst, 5);
}
void ImageFiltering::openCV_dilate(Mat src, Mat &dst)
{
// 对图像进行膨胀操作
// anchor 进行膨胀的锚点,默认以核的中心为锚点
// kernel 膨胀的核
// iterations 膨胀的次数
Mat kernel = getStructuringElement(1,Size(3,3));
Scalar scalar;
dilate(src, dst, kernel, Point(-1, -1), 3, BorderTypes::BORDER_CONSTANT, scalar);
}
void ImageFiltering::openCV_erode(Mat src, Mat &dst)
{
// 对图像进行腐蚀操作
// anchor 进行腐蚀的锚点,默认以核的中心为锚点
// kernel 腐蚀的核
// iterations 腐蚀的次数
Mat kernel = getStructuringElement(1, Size(3, 3));
Sca
Opencv Image Filtering 学习
最新推荐文章于 2023-10-28 01:07:42 发布