实验图片地址:\opencv\sources\samples\data
算术计算:调节亮度、对比度
逻辑运算:遮罩层控制
调节亮度、对比度
代码
# -*- coding: utf-8 -*-
# By:iloveluoluo
# 2019.3.23
import cv2 as cv
import numpy as np
# 算术运算,调节亮度、对比度
# 逻辑运算,遮罩层控制
# src:source
# dst:destination
def get_image_info(image):
"""属性读取"""
# print(image.shape) # (高,宽,通道数)
height = image.shape[0]
width = image.shape[1]
channels = image.shape[2] # Blue, Green, Red
print("height:%s, width:%s, channels:%s, pixels:%s" % (height, width, channels, image.size))
def add_demo(image_a, image_b):
"""图像相加"""
add = cv.add(image_a, image_b)
cv.imshow("addition", add)
def sub_demo(image_a, image_b):
"""图像相减"""
sub = cv.subtract(image_a, image_b)
cv.imshow("subtraction", sub)
def mul_demo(image_a, image_b):
"""图像相乘"""
div = cv.multiply(image_a, image_b)
cv.imshow("multiplication", div)
def div_demo(image_a, image_b):
"""图像相除"""
div = cv.divide(image_a, image_b)
cv.imshow("division", div)
def logic_demo(image_a, image_b):
"""逻辑运算"""
dst1 = cv.bitwise_and(image_a, image_b)
dst2 = cv.bitwise_or(image_a, image_b)
dst3 = cv.bitwise_xor(image_a, image_b)
dst4 = cv.bitwise_not(image_a) # 像素取反
cv.imshow("and", dst1)
cv.imshow("or", dst2)
cv.imshow("xor", dst3)
cv.imshow("not", dst4)
def contrast_brightness_demo(image, c, b):
"""
改变对比度、亮度
c:contrast 对比度 1不变
b:brightness 亮度 0不增加
"""
cv.imshow("contrast brightness src", image)
h, w, ch = image.shape
blank = np.zeros([h, w, ch], image.dtype)
dst = cv.addWeighted(image, c, blank, 1-c, b,)
cv.imshow("contrast brightness dst", dst)
def others_demo(image_a, image_b):
"""各通道灰度平均值,方差(对比度)"""
# mean1 = cv.mean(image_a)
# mean2 = cv.mean(image_b)
mean1, dev1 = cv.meanStdDev(image_a)
mean2, dev2 = cv.meanStdDev(image_b)
print("mean1:\n%s, \n dev1:\n%s" % (mean1, dev1))
print("mean2:\n%s, \n dev2:\n%s" % (mean2, dev2))
src1 = cv.imread('E:/MyFile/Picture/date/LinuxLogo.jpg') # 读取图片
src2 = cv.imread('E:/MyFile/Picture/date/WindowsLogo.jpg') # 读取图片
get_image_info(src1)
get_image_info(src2)
cv.imshow("image1", src1)
cv.imshow("image2", src2)
# 算术运算
"""
add_demo(src1, src2)
sub_demo(src1, src2)
mul_demo(src1, src2)
div_demo(src1, src2)
others_demo(src1, src2)
"""
# 逻辑运算
"""
logic_demo(src1, src2)
"""
# 对比度、亮度
src = cv.imread('E:/MyFile/Picture/date/lenademo.png')
contrast_brightness_demo(src, 1.2, 10) # 对比度为1.2倍,亮度增加10
cv.waitKey(0)
cv.destroyAllWindows()