1.灰度图的直方图
(1)调用库
import cv2
import matplotlib.pyplot as plt
import numpy as np #创建掩膜时需要
(2)绘图-方法1
img=cv2.imread('F:cat.jpg',0)
plt.hist(img.ravel(),256,[0,256])
plt.show()
plt.hist是一个画直方图的命令;img.ravel()可以将图片转化成一维数组,直方图的信息都是从这里提取出来的;256是BIN的数目,[0,256]是像素取值范围,相当于在0-256的像素值范围内化了256组(即BIN数)
运行结果:
(3)绘图-方法2
img=cv2.imread('F:cat.jpg',0)
hist=cv2.calcHist([img],[0],None,[256],[0,256])
plt.plot(hist)
plt.show()
绘制一个plot图,plot的信息是从hist中提取,而hist的信息是通过calcHist计算得来的
运行结果如下:
(4)方法2线条颜色修改
img=cv2.imread('F:cat.jpg',0)
hist=cv2.calcHist([img],[0],None,[256],[0,256])
color=('black')
plt.plot(hist,color=color)
plt.show()
运行结果:
2.不同颜色通道的直方图
img=cv2.imread('F:cat.jpg')
color=('b','g','r')
for i,col in enumerate(color):
hist=cv2.calcHist([img],[i],None,[256],[0,256])
plt.plot(hist,color=col)
plt.xlim([0,256])
plt.show()
运行结果如下:
3.掩膜图像的直方图
(1)创建掩膜
mask=np.zeros(img.shape[:2],np.uint8)
print(mask.shape)
mask[111:222,100:400]=255
创建的掩膜和原图一样大小,但是对[111:111,100:400]的矩形框内赋予像素值为255
(2)绘图
hist_full=cv2.calcHist([img],[0],None,[256],[0,256])
hist_mask=cv2.calcHist([img],[0],mask,[256],[0,256])
plt.plot(hist_full),plt.plot(hist_mask)
plt.xlim([0,256])
plt.show()
运行结果如下:
(3)补充说明
掩上膜的图片可通过以下命令绘制出来,单纯地绘制像素点统计图不需要此步骤
masked_img=cv2.bitwise_and(img,img,mask=mask)