46.图像的边缘填充

目录

        1 概念讲解及用处

        2 函数详解

        3 原理

        4 用C++编写代码进行实现

        1 概念讲解及用处

         图像边缘填充是一种在图像周围添加边缘像素的操作,常用于处理边界像素的影响或为图像提供额外的上下文信息。边缘填充可以帮助保持图像尺寸的一致性,并在后续处理中防止边缘丢失或异常输出。

        边缘填充的主要用途包括:

        处理卷积操作:在应用卷积等滤波器时,图像边缘的像素可能无法完全参与计算,通过填充边缘像素可以解决这个问题。

        边界扩展:在一些应用中,需要获取更多的上下文信息,如图像分割、目标检测等任务,通过边缘填充可以提供额外的像素信息。

        2 函数详解

        在OpenCV中,可以使用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:边界模式,指定如何填充边缘像素。

value:可选的填充值,默认为黑色。

        3 原理

图像边缘填充的数学原理很简单,即在图像四个方向上添加适当数量的像素,并用指定的填充值进行赋值。

在OpenCV中,copyMakeBorder函数的borderType参数用于指定边界模式,决定了如何填充图像边缘像素。以下是一些常见的边界模式:

        BORDER_CONSTANT:使用固定的常数值填充边界。可以通过value参数指定填充值。

        BORDER_REPLICATE:复制最边缘的像素值来填充边界。即将最左边的列复制到左边的边界,将最右边的列复制到右边的边界,将最上面的行复制到顶部边界,将最下面的行复制到底部边界。

        BORDER_WRAP:以图像的另一侧为边界,对应位置的像素进行填充。即将最左边的列填充为最右边的列,将最右边的列填充为最左边的列,将最上面的行填充为最下面的行,将最下面的行填充为最上面的行。

        BORDER_REFLECT_101:与BORDER_REFLECT类似,但是不包括边界像素本身。即将最左边的列以第二个像素为轴进行镜像反射,将最右边的列以倒数第二个像素为轴进行镜像反射,将最上面的行以第二行为轴进行镜像反射,将最下面的行以倒数第二行为轴进行镜像反射。

        BORDER_TRANSPARENT:边界像素保持透明,不进行填充。

        BORDER_DEFAULT:默认边界模式,等效于BORDER_REFLECT_101。

        这些边界模式可以根据具体的需求选择,用于控制边缘填充的方式。根据任务的要求和图像的特性,选择适合的边界模式可以帮助避免边缘效应、保持图像的连续性和准确性。

        4 用C++编写代码进行实现

        下面是一个使用OpenCV进行图像边缘填充的示例代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    // 读取图像
    Mat image = imread("image.jpg", IMREAD_COLOR);
    if (image.empty())
    {
        cout << "Failed to load image." << endl;
        return -1;
    }

    // 边缘填充
    int top = 10, bottom = 10, left = 10, right = 10;
    Scalar value(0, 0, 255); // 填充为红色
    Mat paddedImage;
    copyMakeBorder(image, paddedImage, top, bottom, left, right, BORDER_CONSTANT, value);

    // 显示结果
    imshow("Original Image", image);
    imshow("Padded Image", paddedImage);

    waitKey(0);
    return 0;
}

        在这个示例中,首先使用imread函数读取彩色图像。然后,定义了要在图像四个方向上进行填充的像素数量,并指定了填充值为红色。接下来,使用copyMakeBorder函数对图像进行边缘填充。最后,使用imshow函数显示原始图像和填充后的图像。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别叭叭儿—好好学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值