一、掩膜
掩膜即为与原图大小一致的黑底白框图。
如何生成掩膜?
- 先生成一个全黑的和原始图片大小一样大的图片。mask = np.zeros(img.shape, np.uint8)
- 将想要的区域通过索引方式设置为255.mask[100:200, 200:300]
示例代码如下:
import cv2
import matplotlib.pyplot as plt
import numpy as np
lena = cv2.imread("beautiful women.png")
# 变成黑白图像
gray = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)
# 生成掩膜图像
mask = np.zeros(gray.shape, np.uint8)
# 设计想要统计直方图的区域
mask[200:500, 200:500] = 255
# 进行与运算
# gray与gray进行与运算还是gray, mask的作为为,gray先于gray做与运算,结果再和mask做与运算
img_and = cv2.bitwise_and(gray, gray, mask=mask)
hist_mask = cv2.calcHist([gray], [0], mask, [256], [0,255])
hist_gray = cv2.calcHist([gray], [0], None, [256], [0,255])
plt.plot(hist_mask, label = "mask")
plt.plot(hist_gray,label = "gray")
plt.legend()
plt.show()
cv2.imshow("mask", mask)
cv2.imshow("gray", gray)
cv2.imshow("and", img_and)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如下:
注意点:
0与任何东西进行与运算都为0
255与非0的进行与运算还是255