如何用opencv绘制图像的直方图
使用OpenCV绘制图像的直方图需要以下步骤:
-
导入OpenCV模块和NumPy模块:
import cv2 import numpy as np -
读取图像并转换为灰度图像:
img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) -
计算直方图:
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])这里使用
cv2.calcHist函数计算灰度图像的直方图。函数的参数解释如下:[gray]:输入图像,必须是一个列表,即使只有一个图像也要放在列表中。[0]:指定通道,对于灰度图像只有一个通道,所以为0。None:掩膜,如果没有掩膜则为None。[256]:直方图的大小,表示灰度级别的数量,这里设置为256。[0, 256]:像素值的范围,这里表示灰度级别的范围。
-
绘制直方图:
hist = np.squeeze(hist) hist_img = np.zeros((256, 256, 3), dtype=np.uint8) cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX) for i in range(256): cv2.line(hist_img, (i, 255), (i, 255 - hist[i]), (255, 255, 255))np.squeeze(hist):将直方图数组中的多余维度去掉。np.zeros((256, 256, 3), dtype=np.uint8):创建一个空白图像,大小为256x256,通道数为3。cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX):将直方图数组归一化到0-255范围内。for i in range(256)::遍历每个灰度级别。cv2.line(hist_img, (i, 255), (i, 255 - hist[i]), (255, 255, 255)):在空白图像上绘制直方图线条。
-
显示直方图:
cv2.imshow('histogram', hist_img) cv2.waitKey(0) cv2.destroyAllWindows()使用
cv2.imshow函数显示直方图,使用cv2.waitKey等待按键,使用cv2.destroyAllWindows关闭窗口。
完整代码如下:
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
hist = np.squeeze(hist)
hist_img = np.zeros((256, 256, 3), dtype=np.uint8)
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
for i in range(256):
cv2.line(hist_img, (i, 255), (i, 255 - hist[i]), (255, 255, 255))
cv2.imshow('histogram', hist_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
原文地址: https://www.cveoy.top/t/topic/bLMm 著作权归作者所有。请勿转载和采集!