OpenCV基础API函数三

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);
    //ksize或sigmaX,sigmaY越大模糊程度越大
    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: 边界处理模式

例子 对图像进行模糊

OpenCV基础API函数三_第1张图片

 	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|abcdefgh|hhhhhhh
BORDER_REFLECT 边界对图像进行映射 fedcba|abcdefgh|hgfedcb
BORDER_WRAP 左右上下颠倒 把底边的像素填充到上边界,把上边的像素填充到地辩解 cdefgh
BORDER_REFLECT_101 gfedcb|abcdefgh| gfedcba

OpenCV基础API函数三_第2张图片
由以上图骗我们可以看出各个方法区别所在

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);


    //blur(src, dst, Size(9, 9));
//    imshow("BORDER_CONSTANT ", dst);
}

你可能感兴趣的:(opencv,opencv,计算机视觉,人工智能)