像素运算要求两个图像的大小一致,类型也要一致。
1.算数运算
加、减、乘、除
应用:调节亮度和对比度
import cv2 as cv
'''
黑色:0 白色:255
(1)加法运算:
注意如果相加的像素值大于255则截断为255
dst=cv.add(img1,img2)
(2)减法运算:
dst=cv.subtract(m1,m2)
(3)乘法运算
dst=cv.multiply(m1,m2)
(4)除法运算
dst=cv.multiply(m1,m2)
'''
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)
#均值,得到每个通道的均值
#方差
def others(m1):
mea=cv.mean(m1)#均值
h,dev=cv.meanStdDev(m1)#均值和标准方差
print(mea)
print(h,dev)
m1=cv.imread(r'D:\Project\Opencv\Learning01\angelababy.jpg')
m2=cv.imread(r'D:\Project\Opencv\Learning01\angelababy_gray.jpg')
add_demo(m1,m2)
subtract_demo(m1,m2)
multiply_demo(m1,m2)
divide_demo(m1,m2)
others(m1)
cv.waitKey(0)
2.逻辑运算
与、或、非
应用:遮罩层控制
import cv2 as cv
'''
逻辑与:
dst=cv.bitwise_and(m1,m2)
逻辑或:
dst=cv.bitwise_or(m1,m2)
逻辑非
dst=cv.bitwise_not(m1,m2)
'''
def logic_demo_and(m1,m2):
dst=cv.bitwise_and(m1,m2)
cv.imshow('logic_demo',dst)
def logic_demo_or(m1,m2):
dst=cv.bitwise_or(m1,m2)
cv.imshow('logic_or',dst)
def logic_demo_not(m1,m2):
dst=cv.bitwise_not(m1,m2)
cv.imshow('logic_not',dst)
m1=cv.imread(r'D:\Project\Opencv\Learning01\angelababy.jpg')
m2=cv.imread(r'D:\Project\Opencv\Learning01\angelababy_gray.jpg')
logic_demo_and(m1,m2)
logic_demo_or(m1,m2)
logic_demo_not(m1,m2)
cv.waitKey(0)
3.调整亮度和对比度
import cv2 as cv
import numpy as np
'''
调整亮度和对比度
dst=cv.addWeighted(image1,c,blank,1-c,b)#调整亮度b和对比度c
'''
def contrast_brighness_demo(image1,c,b):#参数:图片,对比度,亮度(单位 像素)
h,w,ch=image1.shape
blank=np.zeros([h,w,ch],image1.dtype)
dst=cv.addWeighted(image1,c,blank,1-c,b)#调整亮度和对比度
cv.imshow('dst',dst)
m1=cv.imread(r'D:\Project\Opencv\Learning01\angelababy.jpg')
cv.imshow('yuantu',m1)
contrast_brighness_demo(m1,1.2,10)
cv.waitKey(0)