OpenCV 像素运算

像素运算
分为算术运算和逻辑运算
算术运算:
加减乘除
调节亮度
调整对比度
逻辑运算:
与或非
遮罩层控制
一:算术运算

import cv2 as cv
import numpy as np

def add_demo(m1,m2):
    dst = cv.add(m1,m2)
    cv.imshow("add_demo",dst)

def subtract_demo(m1,m2):
    dst = cv.subtract(m1,m2)
    cv.imshow("subtract_demo",dst)

def multiply_demo(m1,m2):
    dst = cv.multiply(m1,m2)
    cv.imshow("multiply_demo",dst)

def divide_demo(m1,m2):
    dst = cv.divide(m1,m2)  #不多用
    cv.imshow("divide_demo",dst)

src1 = cv.imread("./a1.jpg")  #读取图片
src2 = cv.imread("./a2.jpg")  #读取图片
print(src1.shape)
print(src2.shape)
cv.imshow("image1",src1)
cv.imshow("image2",src2)
add_demo(src1,src2)
subtract_demo(src1,src2)
multiply_demo(src1,src2)
divide_demo(src1,src2)
cv.waitKey(0)   #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

原图:
在这里插入图片描述

add:(黑色是0,白色为255,当大于255会为白色,小于0为黑色)

在这里插入图片描述

subtract:
在这里插入图片描述

multiply:

在这里插入图片描述

divide:
在这里插入图片描述

获得各个通道的均值:
def others(m1,m2):
M1 = cv.mean(m1)
M2 = cv.mean(m2)
print(M1)
print(M2)
(190.8543375, 190.8543375, 190.8543375, 0.0)  #整体偏黑
(186.68600625000002, 228.5496625, 241.74333125, 0.0)  #红绿较多,所以偏黄
获取各个图像的方差:

def others(m1,m2):
    M1 = cv.mean(m1)
    M2 = cv.mean(m2)
    M1,dev1 = cv.meanStdDev(m1)  #返回均值和方差,分别对应3个通道
    M2,dev2 = cv.meanStdDev(m2)
    print(M1)
    print(dev1)
    print(M2)    
    print(dev2)


[[190.8543375]  #M1
 [190.8543375]
 [190.8543375]]
[[95.31664687]  #dev1
 [95.31664687]
 [95.31664687]]
[[186.68600625]  #M2
 [228.5496625 ]
 [241.74333125]]
[[72.40766216]  #dev2
 [39.39460523]
 [30.92104465]]

可以知道dev2偏小,所以图二中色彩差异(对比性)是较小的,若是整张图片同色,则方差为0,均值为0,可以用来查看扫描仪中是否有信息(方差小于一个预值,则失效,丢弃)
img = np.zeros([400,400,3],np.uint8)
m,dev = cv.meanStdDev(img)
print(m,dev)
二:逻辑运算
与and:(1和1为1)(类似遮罩,当我们使用白色遮罩)
def logic_and_demo(m1,m2):
dst = cv.bitwise_and(m1,m2)
cv.imshow(“logic_and_demo”,dst)

在这里插入图片描述

或or:(1和1,1和0都为1)
def logic_or_demo(m1,m2):
dst = cv.bitwise_or(m1,m2)
cv.imshow(“logic_or_demo”,dst)

在这里插入图片描述

异或xor:(1和0为1)
def logic_xor_demo(m1,m2): #异或:不同为1,相同为0
dst = cv.bitwise_xor(m1,m2)
cv.imshow(“logic_or_demo”,dst)
在这里插入图片描述

非(not):对一张图片取反
def logic_not_demo(m1): #非是对于一张图片
dst = cv.bitwise_not(m1)
cv.imshow(“logic_not_demo”,dst)
在这里插入图片描述

补充:针对视频中inrange

def extrace_object():
    capture = cv.VideoCapture("./1.mp4")
    while True:
        ret,frame = capture.read()  #frame是每一帧图像,ret是返回值,为0是表示图像读取完毕
        if ret == False:
            break
        hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
        lower_hsv = np.array([0,43,46])
        upper_hsv = np.array([10,255,255])
        mask = cv.inRange(hsv,lower_hsv,upper_hsv)
        dst = cv.bitwise_and(frame,frame,mask=mask)
        cv.imshow("video",frame)
        cv.imshow("mask", mask)
        cv.imshow("dst",dst)
        c = cv.waitKey(40)
        if c == 27:
            break

在这里插入图片描述

mask:该函数输出的dst是一幅二值化之后的图像(是将满足我们的图像对象所有位都设为1白色,不满足设置为0黑色)
在这里插入图片描述

bitwise_and:白色全为1与原图相与,会将白色区域提取
在这里插入图片描述

调整亮度和对比度addWeighted

def contrast_brightness_demo(image,c,b):
    '''
    :param image:   原图
    :param c:   对比度 是将像素乘与c,原来2,4---->4, 8  差距由2--->4导致对比增强
    :param b:   亮度  是将每个像素点加上相关亮度
    :return:
    '''
    h,w,ch = image.shape
    blank = np.zeros([h,w,ch],image.dtype)
    dst = cv.addWeighted(image,c,blank,1-c,b)
    cv.imshow("dst",dst)

src = cv.imread(“./1.png”)
cv.imshow(“src”,src)
contrast_brightness_demo(src,1.2,0)
在这里插入图片描述

亮度:

src = cv.imread(“./1.png”)
cv.imshow(“src”,src)
contrast_brightness_demo(src,1,50)
在这里插入图片描述

1、第1个参数,输入图片1,
2、第2个参数,图片1的融合比例
3、第3个参数,输入图片2
4、第4个参数,图片2的融合比例
5、第5个参数,偏差
6、第6个参数,输出图片

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值