GaussianBlur 高斯模糊
void GaussianBlur( InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT );
返回值: 空
src:原图像
dst: 结果图像
ksize:模糊窗口的大小
sigmaX: X轴方向的卷积核标准差
sigmaY: Y轴方向的卷积核标准差,默认为零表示X=Y,当sigmaX,sigmaY同时为零的时候会从ksize中进行推算出sigmaX,sigmaY,
borderType: 边界处理方式
例子:利用你高斯模糊处理图片
void Demo::Gaussian_Blur(Mat &src){
Mat dst;
GaussianBlur(src, dst, Size(17, 17), 3);
imshow("高斯模糊", dst);
GaussianBlur(src, dst, Size(17, 17), 13);
imshow("高斯模糊1", dst);
}
bilateralFilter 双边模糊–美颜效果
void bilateralFilter( InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType = BORDER_DEFAULT );
返回值:空
src:输入的原图像
dst:结果图像
d: 模糊的窗口的大小,如果为零 则从sigmaSpace中计算得出
sigmaColor:颜色控件的卷积核标准差
sigmaSpace:xy空间上面的卷积和标准差,当d>0不考虑sigmaSpace的大小
borderType :边界处理的模式
例子: 利用双边模糊对任务进行美颜
void Demo::mybilateralFilter(Mat &src){
Mat dst;
bilateralFilter(src,dst,0,100,10);
imshow("高斯双边模糊1", dst);
}
相对于高斯模糊和均值模糊双边模糊有一个更大的优点,就是他能够保留图片中的边界 而不会把边界进行模糊从而达到美颜的效果
blur 卷积模糊
void blur( InputArray src, OutputArray dst, Size ksize, Point anchor = Point(-1,-1), int borderType = BORDER_DEFAULT );
返回值: 空
src:输入的圆图像
dst: 输出的结果图像
ksize: 卷积核的大小
anchor:卷积核的锚定点(中心点)
borderType: 边界处理模式
例子 对图像进行模糊
Mat dst;
blur(src, dst, Size(9, 9));
imshow("卷积模糊", dst);
copyMakeBorder 边界处理
void copyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, int borderType, const Scalar& value = Scalar() );
返回值:空
src 输入的原图像
dst:输出的结果图像
top:插入顶边界的宽
bottom:插入底边界的宽
left:插入左边界的宽
right:插入右边界的宽
borderType:边界处理的方法
Scalar:颜色值
borderType | 意思 |
---|
BORDER_CONSTANT | 对边界指定一个常数 | BORDER_REPLICATE | 复制图形边上的一个像素填充到边界上 aaaaaa |a bcdefgh |hhhhhhh | BORDER_REFLECT | 边界对图像进行映射 fedcba|abcdefgh|hgfedcb | BORDER_WRAP | 左右上下颠倒 把底边的像素填充到上边界,把上边的像素填充到地辩解 cdefgh | BORDER_REFLECT_101 | gfedcb |abcdefgh| gfedcba |
由以上图骗我们可以看出各个方法区别所在
void Demo::myBlury(Mat &src){
Mat dst;
copyMakeBorder(src,dst,16,16,16,16,BORDER_CONSTANT,Scalar(0,0,255) );
namedWindow("BORDER_CONSTANT", WINDOW_FREERATIO);
imshow("BORDER_CONSTANT", dst);
copyMakeBorder(src,dst,16,16,16,16,BORDER_REPLICATE );
namedWindow("BORDER_REPLICATE", WINDOW_FREERATIO);
imshow("BORDER_REPLICATE", dst);
copyMakeBorder(src,dst,16,16,16,16,BORDER_REFLECT );
namedWindow("BORDER_REFLECT", WINDOW_FREERATIO);
imshow("BORDER_REFLECT", dst);
copyMakeBorder(src,dst,16,16,16,16,BORDER_WRAP );
namedWindow("BORDER_WRAP", WINDOW_FREERATIO);
imshow("BORDER_WRAP", dst);
copyMakeBorder(src,dst,16,16,16,16,BORDER_REFLECT_101 );
namedWindow("BORDER_REFLECT_101", WINDOW_FREERATIO);
imshow("BORDER_REFLECT_101", dst);
}
|