OpenCV-41 使用掩膜的直方图

一、掩膜

掩膜即为与原图大小一致的黑底白框图。

OpenCV-41 使用掩膜的直方图_第1张图片

如何生成掩膜?

  • 先生成一个全黑的和原始图片大小一样大的图片。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()

输出结果如下:

OpenCV-41 使用掩膜的直方图_第2张图片

OpenCV-41 使用掩膜的直方图_第3张图片

注意点:

0与任何东西进行与运算都为0

255与非0的进行与运算还是255

你可能感兴趣的:(OpenCV,opencv,人工智能,计算机视觉,numpy,python)