Opencv实现边界填充、两个图片像素直接相加后超过255的处理方式(阈值处理方式),一个窗口显示多张图片的方式

本文介绍了OpenCV中如何使用不同的边界填充方法(如复制、反射、对称反射和外包装)处理图片,并讨论了图片直接相加和cv2.add()函数的处理方式,特别是在像素值超过255时的取模操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 opencv两个图片直接相加,会直接相加,如果超过255,会取模。
 print((img_cat+img_cat2)[:5,:,0]) # 0-255 若相加越界后 294 用 294%256 获得余数 38
可以使用这种方式查看。展示的是前5行,所有列的第一个通道的值。
还有一种方法是cv2.add(),这个方法会直接将超过255的值设置为255,不会取模。

import cv2
import matplotlib.pylab as plt

def border_fill(img):
    # 边界填充
    # BORDER_REPLICATE:复制法,也就是复制最边缘像素。
    # BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
    # BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
    # BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg,即将图像的边缘进行交换。
    # BORDER_CONSTANT:常量法,常数值填充。
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)
    replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
    reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REFLECT)
    reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REFLECT_101)
    wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_WRAP)
    constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_CONSTANT, value=0)
    # cv2.imshow('replicate', replicate)
    # cv2.imshow('reflect', reflect)
    # cv2.imshow('reflect101', reflect101)
    # cv2.imshow('wrap', wrap)
    # cv2.imshow('constant', constant)
    # cv2.waitKey()
    # cv2.destroyAllWindows()
    plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
    plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
    plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REPLECT')
    plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
    plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
    plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTAVI')

    plt.show()
# opencv两个图片直接相加,会直接相加,如果超过255,会取模。
# print((img_cat+img_cat2)[:5,:,0])  # 0-255 若相加越界后 294 用 294%256 获得余数 38
# 可以使用这种方式查看。展示的是前5行,所有列的第一个通道的值。
# 还有一种方法是cv2.add(),这个方法会直接将超过255的值设置为255,不会取模。

填充后的结果如图所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值