Opencv中的图像相加,相减,相除,相乘(python实现)

1.相加

代码实战

import os
import cv2
import numpy as np

#读取图片和缩放图片
lenna=cv2.imread('images/lenna.png')
lenna=cv2.resize(src=lenna,dsize=(450,450))
#创建相同尺寸的图片
npimg=np.ones(shape=(lenna.shape[0],lenna.shape[1],lenna.shape[2]),dtype=np.uint8)*100

#两张图片进行与运算
dst=cv2.add(src1=lenna,src2=npimg)
#显示图片
cv2.imshow('lenna',lenna)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()


if __name__ == '__main__':
    print('Pycharm')

在这里插入图片描述
可以看到最终得到的图类似曝光。


2.减法

def Subtract():
    # 读取图片和缩放图片
    lenna = cv2.imread('images/lenna.png')
    lenna = cv2.resize(src=lenna, dsize=(450, 450))
    # 创建相同尺寸的图片
    npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100

    # 首先两张图片进行加法运算
    dst = cv2.add(src1=lenna, src2=npimg)
    #将进行加法之后的图像再进行减法操作,还原回原图
    original=cv2.subtract(src1=dst,src2=npimg)

    print("原图中最大像素值: {}".format(lenna.max()))
    print('相加之后的最大像素值: {}'.format(dst.max()))
    print('相减之后的最大像素值: {}'.format(original.max()))
    # 显示图片
    cv2.imshow('lenna', lenna)
    cv2.imshow('dst', dst)
    cv2.imshow('original',original)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述


print("原图中最大像素值: {}".format(lenna.max()))
print('相加之后的最大像素值: {}'.format(dst.max()))
print('相减之后的最大像素值: {}'.format(original.max()))

在这里插入图片描述

可以看到原图中的最大像素值为255,而相加之后的最大像素值肯定也为255;但是假设原图中有一个像素值为160的,首先加上100之后,那么像素值变为255(因为超过了255,所以只能为255),那么在相减的时候,这个像素值变为了155,和原来的160相比减小了,所以就算原来的图先加后减,图像一般也会变的稍微暗一点。


3.乘法

def mutilpImg():
    # 读取图片和缩放图片
    lenna = cv2.imread('images/lenna.png')
    lenna = cv2.resize(src=lenna, dsize=(450, 450))
    # 创建相同尺寸的图片
    npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100

    #进行乘积
    dst=cv2.multiply(src1=lenna,src2=npimg)
    # 显示图片
    cv2.imshow('lenna', lenna)
    cv2.imshow('dst', dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述

为什么输出的为大部分为白色了,是因为相乘之后很多像素值都大于了255,所以最后的结果就是255,也就是导致图像很多地方都是白色的。


4.除法

def DividImg():
    # 读取图片和缩放图片
    lenna = cv2.imread('images/lenna.png')
    lenna = cv2.resize(src=lenna, dsize=(450, 450))
    # 创建相同尺寸的图片
    npimg = np.ones(shape=(lenna.shape[0], lenna.shape[1], lenna.shape[2]), dtype=np.uint8) * 100

    # 进行乘积
    dst = cv2.divide(src1=lenna, src2=npimg)
    # 显示图片
    cv2.imshow('lenna', lenna)
    cv2.imshow('dst', dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述

print(“原图中最大像素值: {}”.format(lenna.max()))
print(“除法之后最大像素值: {}”.format(dst.max()))

在这里插入图片描述

可以看到原图中的最大像素值为255,而原图中所有的像素值都除了100之后,那么最后的结果只能是<=3,所以看起来是黑色的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值