随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

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

一、概述

  图像在卷积的时候边界像素不能被卷积,原因在于边界没有完全和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,则可以设置填充边缘的颜色值 )
复制代码

二、代码示例

复制代码
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);
复制代码

 

posted on   飘杨......  阅读(1324)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
历史上的今天:
2020-02-17 RxJava2绑定流程分析之——观察者和被观察者是如何实现绑定的
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示