1 图像处理基础库
opencv-python
numpy
2 图像数字矩阵
灰度图像的像素数据就是一个矩阵,矩阵的行对应图像的高(单位为像素),矩阵的列对应图像的宽(单位为像素),矩阵的元素对应图像的像素,矩阵元素的值就是像素的灰度值。当一个图被放大到一定倍数,就能看到像素点。
import cv2
import numpy as np
path = r"C:\Users\Administrator\Desktop\\little.png"
img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
h, w, l = img.shape
print(h, w, l) #打印高、宽、灰度级
print(img) #打印数字矩阵
print(len(img)) #打印图像高
9 8 3
[[[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]]
[[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]]
[[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]]
[[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]]
[[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]
[241 92 114]]
[[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]]
[[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]]
[[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]]
[[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]
[163 136 114]]]
9
3 图像运算
3.1 加法
numpy的+,当和大于255时,会取模256
cv2的add,当和大于255时,会直接使用255
a + b:250+10 = 260 % 256 = 4
cv.add(a, b):250+10 = 260 => 255
opencv addition is a saturated(
饱和的
) operation while Numpy addition is a modulo(取模的
) operation
即当超出范围时,opencv加法会进行饱和操作,numpy加法会进行取模操作
注:左图为numpy +实现,中图为opencv add实现,右图实现左中两张图的加法
import cv2
import numpy as np
path1 = r"C:\Users\Administrator\Desktop\\1.jpg"
img = cv2.imread(path1, cv2.IMREAD_UNCHANGED)
h, w, l = img.shape
mask = np.ones(img.shape, dtype=np.uint8) * 15 #生成一个和原图同尺寸的单位矩阵,并乘以15
imga = img + mask # numpy加法
imgb = cv2.add(img, mask) #opencv add
fusion = cv2.add(imga, imgb) #图像融合
merge = np.hstack((imga, imgb, fusion))
hm = cv2.resize(merge, dsize = None, fx = 0.5, fy = 0.5)
cv2.imshow('add', hm)
cv2.waitKey(0)
cv2.destroyAllWindows()