像素运算有算数运算和逻辑运算
算数运算:加、减、乘、除
应用它来调节亮度,调整对比度
逻辑运算:与、或、非
应用它来遮罩层控制
与运算:只有在非零的区域才能保留下来。
1和0等于0, 1和1等于1, 0和0等于0
黑色是零区域,白色和其他颜色是非零区域。白色可以成功地做成遮罩。
与运算,只有非零和非零的区域被保留下来。
或运算:或运算跟加运算有点相似。
1与0等于1, 1与1等于1, 0与0等于0
所有非零的区域都会有输出。
非运算:是逻辑操作按位取反
0取成1, 1取成0
非是指对一个图像来说的。
下面是像素的算数运算:
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import cv2 as cv
import numpy as np
#像素相加
def pixel_add(m1, m2):
dst = cv.add(m1, m2)
cv.imshow("pixel_add", dst)
#像素相减
def pixel_subtract(m1, m2):
dst = cv.subtract(m1, m2)
cv.imshow("pixel_subtract", dst)
#像素相除
def pixel_divide(m1, m2):
dst = cv.divide(m1, m2)
cv.imshow("pixel_divide", dst)
#像素相乘法
def pixel_multiply(m1, m2):
dst = cv.multiply(m1, m2)
cv.imshow("pixel_multiply", dst)
#需要两张一样大小的图
img1 = cv.imread("D:\exerciseResource\inpaint\synth_ear.bmp")
img2 = cv.imread("D:\exerciseResource\inpaint\\tex_face_mask.bmp")
print(img1.shape)
print(img2.shape)
cv.namedWindow("img1 window", cv.WINDOW_AUTOSIZE)
pixel_add(img1, img2)
pixel_subtract(img1, img2) #像素相减
pixel_divide(img1, img2) #像素相除
pixel_multiply(img1, img2)#像素相乘
logic_demo(img1, img2)
cv.waitKey(0)
cv.destroyAllWindows()
运行如下:像素相加的效果图,第一张是两张原图,第二张是相加的效果图
像素的逻辑运算:
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import cv2 as cv
import numpy as np
#逻辑运算
def logic_demo(m1, m2):
# res = cv.bitwise_and(m1, m2) #与运算
# res = cv.bitwise_or(m1, m2) #或运算,或运算的效果跟加法有点相似
image = cv.imread("F:\\flower.jpg")
res = cv.bitwise_not(image) #非运算,按位取反
cv.imshow("pic", image)
cv.imshow("logic_demo", res)
#调整亮度
def contrast_brightness_demo(image, c, b):
h, w, ch = image.shape
blank = np.zeros([h, w, ch], image.dtype)
dst = cv.addWeighted(image, c, blank, 1-c, b)
cv.imshow("contr_brightness", dst)
logic_demo(img1, img2)
image = cv.imread("F:\\flower.jpg")
cv.imshow("image2", image)
contrast_brightness_demo(image, 1.2, 15) #亮度在原来的基础上提示1.2 和10
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:第一张是逻辑非的效果图,第二张是调整亮度的效果图