基于OpenCV的图片算术操作

本文详细介绍了使用OpenCV进行图像处理的各种方法,包括图像的算术运算如加减乘除,计算图像通道上的平均值和方差,以及利用像素点运算进行图像处理,如逻辑与、或、取反等操作,适用于图像分析和计算机视觉领域的初学者和实践者。

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

如果需要对两张图片做加减等算术操作,那么前提是这两张图片的通道数目、尺寸必须一致。

import numpy as np
from cv2 import cv2
 

def add(img1,img2):
    dst = cv2.add(img1,img2)
    cv2.imshow("add_dst",dst)
 
def subtract(img1,img2):
    dst = cv2.subtract(img1,img2)
    cv2.imshow("subtract_dst",dst)
    
def divide_demo(img1,img2):
    dst = cv2.divide(img1,img2)
    cv2.imshow("divide_dst",dst)
 
def multiply_demo(img1,img2):
    dst = cv2.multiply(img1,img2)
    cv2.imshow("multiply_dst",dst)

也可以查看图像通道上的平均值,可以使RGB通道,也可以是HSV通道,当然灰度图也是可以的。

def average(img1,img2):
    mean1 = cv2.mean(img1)
    mean2 = cv2.mean(img2)
    print(mean1)
    print(mean2)
 

有时候,仅仅查看平均值并不能够正确地反映出我们想要的信息,这时候就可以查看利用opencv中自带的 cv2.meanStdDev计算出方差。方差越大说明各个像素之间差异越大

def mean_dev(img1,img2):
    mean1, std1= cv2.meanStdDev(img1)
    mean2, std2= cv2.meanStdDev(img2)
    print(mean1)
    print(mean2)
    print(std1)
    print(std2)

有些时候,我们可以通过像素点的运算来处理图像。比方通过一张遮罩图(或黑或白的二值图),然后通过与、或、取反操作待处理的图像,就可以得出我们想要的结果。


def logic_and_demo(img1,img2):
    """逻辑与运算,只有两个bit都是1时,两bit的与运算结果才为1"""
    """黑色BGR(0,0,0)数据类型为uint8,所以二进制形态为00000000"""
    """白色BGR(255,255,255)数据类型为uint8,二进制形态为11111111"""
    """由此可见黑色像素与任何颜色进行与运算结果都为黑色,黑色遮挡一切"""
    """白色像素和任何颜色像素进行与运算结果都为原来的颜色,白色相当于透明"""
    dst = cv2.bitwise_and(img1,img2)
    #注意,若img1或img2中有一个是mask,则它可以作为遮罩层
    cv2.imshow("logic_and_dst",dst)
    
def logic_or_demo(img1,img2):
    """两bit进行或运算,两bit中只要与一个为1,则结果为1"""
    """任何颜色与黑色进行或运算,结果都保持原来的颜色"""
    """任何颜色与白色进行或运算,结果都为白色"""
    dst = cv2.bitwise_or(img1,img2)
    cv2.imshow("logic_or_dst",dst)
    
def logic_not_demo(img1):
    """bit_wise_not其实是按位取反,即像素的某个通道二进制形态为10010011,则变为01101100"""
    """注意01101100+10010011=11111111,即255"""
    dst = cv2.bitwise_not(img1)
    cv2.imshow("logic_not_dst",dst)

以上内容如有错误,欢迎指出。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值