zl程序教程

您现在的位置是:首页 >  后端

当前栏目

OpenCV对图片进行边缘像素填充

Opencv边缘 进行 图片 填充 像素
2023-09-14 09:05:26 时间

1、概述

  图像在卷积的时候边界像素不能被卷积,原因在于边界没有完全和kernel重叠,所以当3x3滤波时有一像素边缘没有被处理,当5x5滤波的时有2像素的边缘没有被处理。如下图所示:

 

OpenCV中常见的边缘填充方式主要有4种:

1.BORDER_DEFAULT:默认模式

2.BORDER_CONSTANT:用指定像素值填充边缘

3.BORDER_REPLICATE:用已知的边缘像素填充边缘像素

4.BORDER_WRAP:用另外一边的像素来补偿填充

边缘填充函数介绍:copyMakeBorder(
 - Mat src, // 输入图像
 - Mat dst, // 添加边缘后的图像
 - int top, // 边缘长度,一般上下左右都取相同值,
 - int bottom,
 - int left,
 - int right, 
 - int borderType // 边缘类型主要是如上的四种类型
 - Scalar value ,//如果边缘填充类型为BORDER_CONSTANT,则可以设置填充边缘的颜色值
)

2、代码示例

Mat src = imread(filePath);
    Mat constant = src.clone();
    Mat replicate = src.clone();
    Mat wrap = src.clone();
    if(src.empty()){
        return;
    }
    imshow("src",src);
    Mat border_default;

    copyMakeBorder(src,border_default,50,50,50,50,BORDER_DEFAULT);//系统默认填充方式
    imshow("border_default",border_default);

    Mat border_constant;
    copyMakeBorder(constant,border_constant,50,50,50,50,BORDER_CONSTANT);//填充边缘,用指定的像素值
    imshow("border_constant",border_constant);


    Mat border_replicate;
    copyMakeBorder(replicate,border_replicate,50,50,50,50,BORDER_REPLICATE);//填充边缘像素用已知边缘像素值
    imshow("border_replicate",border_replicate);

    Mat border_wrap;
    copyMakeBorder(src.clone(),border_wrap,50,50,50,50,BORDER_WRAP);//填充边缘像素用已知边缘像素值
    imshow("border_wrap",border_wrap);

 本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓