OpenCV对图像做边界填充

目录

一、引言

1、什么是opencv?

2、python的opencv如何实现图像的边界填充?

3、cv2.copyMakeBorder()的参数有哪些?

二、代码实现

1、已有资源(img_2.png)

2、处理数据

3、显示处理后的图像

4、处理后的图片为:

1)原图:

2)常数填充:

3)反射填充:

4)反射101填充:

5)复制映射:

6)环绕映射:


一、引言

1、什么是opencv?

OpenCV(Open Source Computer Vision Library)是一个广泛用于计算机视觉和图像处理的开源库,它提供了各种功能,包括图像的边界填充。边界填充是一种常见的图像处理操作,通常用于扩展图像的尺寸或处理边缘像素。

2、python的opencv如何实现图像的边界填充?

cv2.copyMakeBorder()是OpenCV库中的一个函数,用于给图像添加额外的边界(padding)。

3、cv2.copyMakeBorder()的参数有哪些?

copyMakeBorder(src: UMat, top: int, bottom: int, left: int, right: int, borderType: int, dst: UMat | None = ..., value: cv2.typing.Scalar = ...)
它有以下几个参数:
src:要扩充边界的原始图像。
top, bottom, left, right:相应方向上的边框宽度。
borderType:定义要添加边框的类型,它可以是以下的一种:
cv2.BORDER_CONSTANT:添加的边界框像素值为常数(需要额外再给定一个参数)。
cv2.BORDER_REFLECT:添加的边框像素将是边界元素的镜面反射,类似于gfedcba|abcdefgh|hgfedcba。
cv2.BORDER_REFLECT_101 或 cv2.BORDER_DEFAULT:和上面类似,但是有一些细微的不同,类似于gfedcb|abcdefgh|gfedcba
cv2.BORDER_REPLICATE:使用最边界的像素值代替,类似于aaaaaa|abcdefgh|hhhhhhh
cv2.BORDER_WRAP:左右两边替换,cdefgh|abcdefgh|abcdefg

二、代码实现

1、已有资源(img_2.png)

2、处理数据

img = cv2.imread('img.png')
#这行代码加载了名为img.png的图像,并将其存储在变量img中。
top,bottom,left,right = 50,50,50,50
#这行代码定义了要在图像的四个边界上应用的填充大小。在这里,上、下、左、右各有50像素的填充。
constant = cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_CONSTANT,value=0)
#这行代码使用cv2.copyMakeBorder函数对图像zl进行了常数填充。填充的颜色值为0(黑色),cv2.BORDER_CONSTANT表示使用常数填充模式。
reflect = cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_REFLECT)
#这行代码使用cv2.copyMakeBorder函数对图像zl进行了反射填充。cv2.BORDER_REFLECT101表示使用反射填充模式
reflect101 = cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_REFLECT101)
#这行代码使用cv2.copyMakeBorder函数对图像zl进行了反射101填充。cv2.BORDER_REFLECT101表示使用反射101填充模式
replicate = cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_REPLICATE)
# 这行代码使用cv2.copyMakeBorder函数对图像zl进行了复制填充。cv2.BORDER_REPLICATE表示使用复制填充模式。
wrap = cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_WRAP)
#这行代码使用cv2.copyMakeBorder函数对图像zl进行了环绕填充。cv2.BORDER_WRAP表示使用环绕填充模式。

3、显示处理后的图像

cv2.imshow('ORIGINAL', img)
# 这行代码显示原始图像。'ORIGINAL'是窗口标题,img是原始图像的变量名。
cv2.waitKey(0)
#这行代码等待用户按下键盘上的任意键,以便在查看图像后继续执行代码。
cv2.imshow('CONSTANT', constant)
#这行代码显示常数填充后的图像。'CONSTANT'是窗口标题,constant是常数填充后的图像的变量名。
cv2.waitKey(0)
cv2.imshow('REFLECT', reflect)
#这行代码显示反射填充后的图像。'REFLECT'是窗口标题,reflect是反射填充后的图像的变量名。
cv2.waitKey(0)
cv2.imshow('REFLECT_101', reflect101)
cv2.waitKey(0)
cv2.imshow('REPLICATE', replicate)
cv2.waitKey(0)
cv2.imshow('WRAP', wrap)
cv2.waitKey(0)
cv2.destroyAllWindows()
: 最后,这行代码关闭所有打开的图像窗口,使程序能够正常退出。

4、处理后的图片为:

1)原图:

2)常数填充:

3)反射填充:

4)反射101填充:

5)复制映射:

6)环绕映射:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 OpenCV 中,高斯滤波可以使用函数 `GaussianBlur()` 实现。该函数支持自动填充边界,可以使用 `BORDER_DEFAULT` 参数指定边界填充方式,具体用法如下: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { Mat src = imread("input.jpg"); Mat dst; GaussianBlur(src, dst, Size(5, 5), 0, 0, BORDER_DEFAULT); imshow("input", src); imshow("output", dst); waitKey(); return 0; } ``` 其中 `Size(5, 5)` 指定了高斯核的大小,第五个参数为 0 表示根据核大小自动计算高斯函数的标准差,第六个参数 `BORDER_DEFAULT` 指定了边界填充方式为默认方式,即使用复制边界的方式进行填充。如果需要使用其他的边界填充方式,可以选择以下常量: - `BORDER_CONSTANT`:使用常量填充边界。 - `BORDER_REFLECT`:以边界为对称轴,对超出边界的像素进行镜像。 - `BORDER_REFLECT_101`:与 `BORDER_REFLECT` 类似,但不包括边界本身。 - `BORDER_REPLICATE`:复制边界像素。 - `BORDER_WRAP`:像素超出边界时使用另一端的像素进行填充。 例如,如果需要使用常量填充边界,可以使用以下代码: ```c++ GaussianBlur(src, dst, Size(5, 5), 0, 0, BORDER_CONSTANT, Scalar(0, 0, 0)); ``` 其中 `Scalar(0, 0, 0)` 指定了常量填充的像素值为黑色。 ### 回答2: 在使用OpenCV进行高斯滤波时,填充边界是一种常用的处理方式。当我们对图像应用高斯滤波时,我们需要在图像边界处进行填充,以避免边界像素受到滤波器的影响导致失真。 填充边界的方法有不同的选择。一种常见的方法是零填充(Zero Padding),即在原始图像边界周围添加一个由零像素组成的边界。这可以通过调用`cv2.copyMakeBorder`函数来实现。通过指定填充的宽度和高度,我们可以决定在图像的四个边界周围添加多少行和列的零像素。 例如,如果我们的原始图像是一个300x300的图像,我们可以选择在边界周围各自添加30个像素,这样我们的新图像大小将是360x360。通过这样的填充,我们可以保证在应用高斯滤波之前,边界像素周围没有超过原始图像范围的像素。 然后,我们可以使用`cv2.GaussianBlur`函数来对填充后的图像应用高斯滤波。通过指定高斯滤波器的核大小和标准差,我们可以控制滤波器的强度和模糊程度。滤波后的图像将包含平滑的像素值,而边界像素不会受到过多的影响。 总之,使用OpenCV进行高斯滤波时,我们需要使用填充边界的技术来处理图像边界处的像素。这样可以确保滤波器的效果不会失真,并且可以得到准确的滤波结果。 ### 回答3: OpenCV的高斯滤波是一种常用的图像处理技术,可以用于平滑图像并减少噪声。在进行高斯滤波时,有时我们需要填充边界像素。 填充边界是为了防止在进行滤波操作时出现图像边缘信息的丢失。因为高斯滤波是通过计算像素周围区域的平均值来得到新的像素值,如果不填充边界,那些位于边缘的像素的周围区域可能会超出图像的范围,导致无法计算得到正确的像素值。 为了解决这个问题,OpenCV在进行高斯滤波时提供了填充边界的选项。在使用高斯滤波函数`cv2.GaussianBlur()`时,我们可以通过设置`borderType`参数来指定边界填充的方式。 常用的边界填充方式有以下几种: 1. `BORDER_REPLICATE`:使用边界像素值进行填充。即将边界像素值复制到超出范围的区域。 2. `BORDER_CONSTANT`:使用常数进行填充。可以通过设置`borderValue`参数指定填充的常数值。 3. `BORDER_REFLECT`:使用边界像素的镜像进行填充。将边界处的像素值复制到超出范围的区域,超出部分的像素值为镜像。 通过选择合适的边界填充方式,我们可以在进行高斯滤波时避免边缘信息的丢失,得到更好的滤波效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值