本文代码使用python实现
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 divide_demo(m1, m2):
dst = cv.divide(m1, m2)
cv.imshow("divide_demo", dst)
# 像素相乘
def multiply_demo(m1, m2):
dst = cv.multiply(m1, m2)
cv.imshow("multiply_demo", dst)
# 其他操作
def others(m1, m2):
M1, dev1 = cv.meanStdDev(m1) # M1均值,dev1方差
M2, dev2 = cv.meanStdDev(m2) # M2均值,dev2方差
h, w = m1.shape[:2]
print(M1) # 打印均值M1
print(M2) # 打印均值M2
print(dev1) # 打印方差
print(dev2) # 打印方差
img = np.zeros([h, w], np.uint8) # 产生一个所有像素都为0的图片
m, dev = cv.meanStdDev(img) # 获取该图片的均值和方差
print(m) # 打印均值:[[0.]]
print(dev) # 打印方差:[[0.]]
# 说明:可通过均值和方差判断图片中是否有有用信息
src1 = cv.imread("C:/Users/admin/Desktop/1.jpg") # 打开一张图片
src2 = cv.imread("C:/Users/admin/Desktop/2.jpg") # 打开一张图片
print(src1.shape)
print(src2.shape)
cv.namedWindow("input image1", cv.WINDOW_AUTOSIZE) # 设置图片尺寸,自动
cv.imshow("input image1", src1) # 显示图像
cv.namedWindow("input image2", cv.WINDOW_AUTOSIZE) # 设置图片尺寸,自动
cv.imshow("input image2", src2) # 显示图像
add_demo(src1, src2)
subtract_demo(src1, src2)
divide_demo(src1, src2)
multiply_demo(src1, src2)
others(src1, src2)
cv.waitKey(0)
cv.destroyAllWindows()
效果如下,注意每张图片的标题
像素的逻辑运算
def logic_demo(m1, m2):
dst = cv.bitwise_and(m1, m2) # 逻辑运算,与
cv.imshow("logic_demo_and", dst)
dst = cv.bitwise_or(m1, m2) # 逻辑运算,或
cv.imshow("logic_demo_or", dst)
dst = cv.bitwise_not(m1, m2) # 逻辑运算,非
cv.imshow("logic_demo_not", dst)
dst = cv.bitwise_xor(m1, m2) # 逻辑运算,异或
cv.imshow("logic_demo_xor", dst)
亮度和对比度的调节
def contrast_brightness(image, c, b):
h, w, ch = image.shape[:3]
blank = np.zeros([h, w, ch], image.dtype) # 新建一个全为0的图像,尺寸和通道与image相同
dst = cv.addWeighted(image, c, blank, 1-c, b) # image图像1,c对比对,blank图像2,1-c对比度,b亮度
cv.imshow("con-bri-demo", dst) # 显示图像
contrast_brightness(src1, 1.5, 0)
效果如下