1.像素运算
运算图像的大小和类型一定要一样才可以
2.算数运算
加减乘除
2.1 加法运算
解释结果
黑色是0,0加上任意值都为0,所以黑色的不会影响
白色是255,由于uint8一个字节的限制,最大值为255,255加上任意值,最后都是255,显示白色
# -*- coding:utf-8 -*-
# Linda Li 2019/8/15 16:54 cv_14_像素运算 PyCharm
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)
print("------hello python")
src1 = cv.imread("../cv_02/cv_141.jpg")
src2 = cv.imread("../cv_02/cv_142.jpg")
# 运算图像的大小和类型一定要一样才可以
print(src1.shape)
print(src1.shape)
# 分别打印输出
cv.namedWindow("image1", cv.WINDOW_AUTOSIZE)
cv.imshow("image1", src1)
cv.imshow("image2", src2)
# add_demo(src1, src2)
# subtract_demo(src1, src2)
# divide_demo(src1, src2)
multiply_demo(src1, src2)
cv.waitKey(0)
cv.destroyAllWindows()
减法运算
2.3 除法运算
除法,一般用的比较少,两个数相除,商特别小的话容易一片漆黑
2.4 乘法运算
其实放大看,图一的Linux的附近是有模糊的,也就是介于0-255之间的值,所以会导致乘机在0-255之间是模糊的,黑白解释参见加法
3.逻辑运算
or and not
遮罩层
3.1与and
都为真TRUE才是真,有一个假FALSE就是假
黑色的地方都是0,并集之后依旧是0,
白色的地方是1,并集之后image2的不变
def logic_demo(m1, m2):
dst = cv.bitwise_and(m1, m2)
cv.imshow("logic_demo", dst)
3.2 or
有一个真就是真,回两个图像里真的部分都保留下来
def logic_demo(m1, m2):
dst = cv.bitwise_and(m1, m2)
cv.imshow("logic_demo", dst)
3.3 not 非
按位取反
高字节的都会变成0,0会变成1
111000——>000111
4.调整亮度和对比度
# -*- coding:utf-8 -*-
# Linda Li 2019/8/16 8:03 cv_14_像素运算 PyCharm
import cv2 as cv
import numpy as np
def contrast_brightness_demo(image, c, b):
"""c_对比度和b_亮度
这个是粗略的调整,ps软件是会精准的调整是先计算均值,然后每个遍历每个像素点减去均值,之后乘以倍数"""
# shape()返回值是(646, 1024, 3)高,宽,通道数channel
h, w, ch = image.shape
# 要建立一个blank空白图像黑色的图像和image的大小和类型都一样
blank = np.zeros([h, w, ch], image.dtype)
# 只要是函数里none的参数,python都可以在前面接收
dst = cv.addWeighted(image, c, blank, 1-c, b)
cv.imshow("con-bri-demo", dst)
print("------hello python------")
src = cv.imread("../cv_02/cv_181.jpg")
cv.imshow("input image", src)
# 对比度1.2,亮度10
contrast_brightness_demo(src, 1.2, 10)
# 对比度1.5,亮度10
contrast_brightness_demo(src, 1.5, 10)
# 对比度1.5,亮度50
contrast_brightness_demo(src, 1.5, 50)
cv.waitKey(0)
cv.destroyAllWindows()