一:数值运算
opencv自带图片色素的处理函数:
相加:add()
相减:subtract()
相乘:multiply()
相除:divide()
原理就是:通过获取两张(一次只能是两张)个图片的同一个位置的色素值来实现运算。
运算的要求:两张图片的shape要一样。
例图:
二:逻辑运算
opencv自带图片色素的处理函数:
与:bitwise_add()
或:bitwise_or()
非:bitwise_not()
异或:bitwise_xor()
与运算口诀:&与运算,有0为0,全1为1
或运算口诀:|或运算,有1为1,全0为0
下面展示 代码
。
import cv2 as cv
import numpy as np
# 数值运算:加减乘除
def shu_image(srcA, srcB):
src = cv.add(srcA, srcB) # 加
cv.imshow("add", src)
src = cv.subtract(srcA, srcB) # 减
cv.imshow("subtract", src)
src = cv.multiply(srcA, srcB) # 乘
cv.imshow("multiply", src)
src = cv.divide(srcA, srcB) # 除
cv.imshow("divide", src)
# 其他运算 求均值、方差
def others(m1,m2):
M1,dev1 = cv.meanStdDev(m1) #M1是均值,dev1是方差
M2,dev2 = cv.meanStdDev(m2) #M1是均值,dev1是方差
h,w = m1.shape[:2]
print(M1)
print(M2)
print(dev1)
print(dev2)
img = np.zeros([h,w],np.uint8)
m,dev = cv.meanStdDev(img)
print(m)
print(dev)
#逻辑运算:与或非的操作
def luo_image(srcA, srcB):
src = cv.bitwise_and(srcA, srcB)#与 两张图片同一位置的色素两个值均不为零的才会有输出
cv.imshow("and", src)
src = cv.bitwise_or(srcA, srcB)#或 两张图片同一位置的色素两个值不全为零的才会有输出
cv.imshow("or", src)
src = cv.bitwise_not(srcA)#非 对一张图片操作 取反
cv.imshow("not", src)
src = cv.bitwise_xor(srcA, srcB)#异或 两张图片同一位置的色素两个值有一个为零,另一个不为零才会输出
cv.imshow("xor", src)
# 粗略的调节对比度和亮度 a是对比度 g是亮度
def contrast_brightness_image(src1, a, g):
h, w, ch = src1.shape # 获取shape的数值,height和width、通道
# 新建全零图片数组src2,将height和width,类型设置为原图片的通道类型(色素全为零,输出为全黑图片)
src2 = np.zeros([h, w, ch], src1.dtype)
dst = cv.addWeighted(src1, a, src2, 1 - a, g) # addWeighted函数说明如下
cv.imshow("con-bri-demo", dst)
if __name__ == '__main__':
'''
数值运算shu_image()部分
'''
# src1 = cv.imread("pic/linux.jpg")
# src2 = cv.imread("pic/windows.jpg")
# cv.imshow("original1", src1)
# cv.imshow("original2", src2)
# shu_image(src1, src2)
# cv.waitKey(0)
# cv.destroyAllWindows()
'''
其他运算others()部分
'''
# src1 = cv.imread("pic/linux.jpg")
# src2 = cv.imread("pic/windows.jpg")
# others(src1,src2)
'''
逻辑运算luo_image()部分
'''
# src1 = cv.imread("pic/linux.jpg")
# src2 = cv.imread("pic/windows.jpg")
# luo_image(src1,src2)
# cv.waitKey(0)
# cv.destroyAllWindows()
'''
调节亮度和对比度contrast_brightness_image()
'''
src = cv.imread("pic/cat.jpg")
cv.imshow("src", src)
contrast_brightness_image(src, 1, 10)
cv.waitKey(0)
cv.destroyAllWindows()
dddWeighted( const CvArr* src1, double alpha,const CvArr* src2, double beta,double gamma, CvArr* dst );
参数1:src1,第一个原数组.
参数2:alpha,第一个数组元素权
参数3:src2第二个原数组
参数4:beta,第二个数组元素权重
参数5:gamma,图1与图2作和后添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了
参数6:dst,输出图片
效果如下:
操作之后: