【opencv学习】【图像的数值计算操作】

该博客主要介绍了计算机视觉中的图像处理技术,包括:1) 图像像素值的整体加法,展示了数值操作对图像的影响;2) 使用OpenCV进行图像的resize操作,探讨了按像素数和按比例缩放的方法;3) 讨论了不同方式的图像相加,包括直接相加、使用cv2.add函数以及cv2.addWeighted函数进行加权融合,分析了不同方法对图像效果的差异。

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

import cv2


# 展示图像,封装成函数
def cv_show_image(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)  # 等待时间,单位是毫秒,0代表任意键终止
    cv2.destroyAllWindows()


img_cat = cv2.imread('D:/images/cat.jpg')
print(img_cat.shape)  # 彩色图像的shape=(H, W, C)
img_dog = cv2.imread('D:/images/dog.jpg')
print(img_dog.shape)

# 操作一:给每个像素整体加上一个数值
img_cat2 = img_cat + 10
print(img_cat2.shape)
print(img_cat[:3, :, 0])  # 只打印第1个通道的前3行数据,仅仅为了方便查看
print(img_cat2[:3, :, 0])  # 只打印第1个通道的前3行数据,仅仅为了方便查看,每个像素点的值加上了10

# 操作二:图像resize
# 第一种:直接让图像resize到指定的像素
img_cat_tmp = img_cat.copy()
res = cv2.resize(img_cat_tmp, (400, 300))
print(res.shape)
cv_show_image('reshaped image', res)
# 第二种:直接让图像resize到指定的比例,按照某个比例放大和缩小
img_cat_tmp = img_cat.copy()
res = cv2.resize(img_cat_tmp, (0, 0), fx=2, fy=2)  # 扩大4倍
print(res.shape)
cv_show_image('reshaped image', res)

img_cat_tmp = img_cat.copy()
res = cv2.resize(img_cat_tmp, (0, 0), fx=0.5, fy=0.5)  # 缩小4倍
print(res.shape)
cv_show_image('reshaped image', res)

# 操作三:图像相加
# 由于二图片大小不一致,因此需要先弄成一致的size。两个shape值不一样是无法相加的
# resize的第二个参数是一个目标的(W, H)
img_cat_resize = cv2.resize(img_cat, (img_dog.shape[1], img_dog.shape[0]))
print(img_cat_resize.shape)

# 第一种加法,单纯的数值操作,加超过了 unit8 的范围255,就会产生uint8数据翻转
img_mix = img_cat_resize + img_dog
print(img_mix[:3, :, 0])  # 只打印第1个通道的前3行数据,仅仅为了方便查看
cv_show_image('image', img_mix)

# 第二种加法,使用cv函数相加,当像素点超过255的,就截断,只取255,这样是为了图像考虑。
img_mix = cv2.add(img_cat_resize, img_dog)
print(img_mix[:3, :, 0])  # 只打印第1个通道的前3行数据,仅仅为了方便查看
cv_show_image('image', img_mix)

# 第三种加法,使用cv函数相加,当像素点超过255的,就截断,只取255,这样是为了图像考虑。但是会考虑各个部分的权重, y = a*x_1 + b*x_2 + b
# 这样的图像融合才能更好的看清楚样子
img_mix = cv2.addWeighted(img_cat_resize, 0.4, img_dog, 0.6, 0)
print(img_mix[:3, :, 0])  # 只打印第1个通道的前3行数据,仅仅为了方便查看
cv_show_image('image', img_mix)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值