opencv边界填充、数值计算及图片融合

1,边界填充
cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value)
src:需要填充的图像
top:图像上面填充边界的长度
bottom:图像上下面填充边界的长度
left:图像左面填充边界的长度
right :图像右面填充边界的长度
borderType:边界的类型
BORDER_REPLICATE:复制法,即复制最边缘的像素。例如:aaaa|abcdefg|ggggg
BORDER_REFLECT:反射法,即以最边缘的像素为对称轴。例如:fedcba|abcdefg|gfedec
BORDER_REFLECT_101:反射法,也是最边缘的像素为对称轴,但与BORDER_REFLECT有区别。例如:fedcb|abcdefg|fedec
BORDER_WRAP:外包装法,即以图像的左边界与右边界相连,上下边界相连。例如:cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法。
value:填充的边界颜色,通常用于常量法填充中

import cv2  #读取格式是BGR
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
#读入图像
img=cv2.imread('cat.jpg')
#显示图像
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0) 
    cv2.destroyAllWindows()
    
#各边界需要填充的值
to
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值