OpenCV_PY_1.8图像运算

前提需知

执行图像运算时,图像的shape值要保持一致

一、加法运算

前诉

加法运算符“ ”和cv2.add()函数可用于执行图像加法运算

用“+”执行图像加法时,若两个像素相加大于256,按256取模;用cv2.add()执行图像加法时,若两个像素相加大于256,则按255取模。

测试代码

import cv2
img=cv2.imread('img.png',cv2.IMREAD_REDUCED_COLOR_2)  # 读图像,尺寸减小为1/2
img2=cv2.imread('img2.png',cv2.IMREAD_REDUCED_COLOR_2)  # 读图像,尺寸减小为1/2
# 合并图像
img3=img+img2
img4=cv2.add(img,img2)
# 显示原图像、+运算结果图像、add()运算结果图像
cv2.imshow('Rem',img)
cv2.imshow('ice',img2)
cv2.imshow('Rem+ice',img3)
cv2.imshow('Rem add ice',img4)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果 

二、加权加法运算

前诉

cv2.addWeighted(),用于将两个图像按照给定的权重进行加权合成,实现图像融合

dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)

参数说明:

  • src1和src2是要合成的两个输入图像。
  • alpha是第一个输入图像(src1)的权重。
  • beta是第二个输入图像(src2)的权重。
  • gamma是一个可选的参数,表示在合成过程中添加到每个像素上的常数值,不修正设置为0

权重越高,图像叠加显示效果越好,当权重为1时,相当于用叠加原图

函数会返回合成后的图像dst,其数学表达式为:dst = src1 * alpha + src2 * beta + gamma

测试代码

import cv2

img1 = cv2.imread('img.png', cv2.IMREAD_REDUCED_COLOR_2)  # 读图像,尺寸减小为1/2
img2 = cv2.imread('img2.png', cv2.IMREAD_REDUCED_COLOR_2)  # 读图像,尺寸减小为1/2
img3 = cv2.addWeighted(img1, 0.8, img2, 0.2, 0)

cv2.imshow('Rem', img1)  # 显示img1
cv2.imshow('ice', img2)  # 显示img2
cv2.imshow('Rem AW ice', img3)  # 显示加权加法运算后的图像
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果

 总结

权重越高,图像叠加后显示效果越好。当权重为1时,相当于用原图进行叠加

三、位运算

前诉

图像由若干像素点组成,每个像素点在计算机中是用一个字节储存,用二进制表示。而位运算是二进制的操作,所以图像可以进行位运算。计算机中0为假,1(非0)为真。

例子:两张shape值相同图像的相同相对位置的像素点值分别为42,127,转化为二进制=分别为00101010,01111111,分别进行下列位运算:

与运算:全真为真,一假为假

 

或运算:全假为假,一真为真

取反运算:真变假,假变真

异或运算:不同为真,相同为假

测试代码

import cv2


src1 = cv2.imread('img.png', cv2.IMREAD_REDUCED_COLOR_2)  # 读三通道彩图,尺寸减小为1/2
src2 = cv2.imread('HB.png', cv2.IMREAD_REDUCED_COLOR_2)  # 读三通道黑白图,尺寸减小为1/2

# 封装函数,局部变量不会影响初始数据
def s1ands2(img1,img2):
    img = cv2.bitwise_and(img1, img2)  # 按位与
    cv2.imshow('Rem and ice', img)  # 显示与运算图片
    return 0

def s1ors2(img1,img2):
    img = cv2.bitwise_or(img1, img2)  # 按位或
    cv2.imshow('Rem or ice', img)  # 显示或运算图片
    return 0

def s1nots2(img1):
    img = cv2.bitwise_not(img1)  # 按位取反
    cv2.imshow('Rem not ice', img)  # 显示取反运算与图片
    return 0

def s1xors2(img1,img2):
    img = cv2.bitwise_xor(img1, img2)  # 按位异或
    cv2.imshow('Rem xor ice', img)  # 显示异或运算图片
    return 0

cv2.imshow('Rem1', src1)  # 显示三通道彩图
cv2.imshow('HB', src2)  # 显示三通道黑白图
# 调用位运算函数
s1ands2(src1,src2)
s1ors2(src1,src2)
s1nots2(src1)
s1xors2(src1,src2)

cv2.waitKey(0)  # 等待按键输入任意键
cv2.destroyAllWindows()  # 销毁所有窗口

运行结果

OpenCV学习笔记,雨声伴我入眠

2023/07/29/1:51

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值