一 核心函数
calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None)
二 参数讲解
- image输入图像,传入时应该用中括号[ ]括起来
- channels::传入图像的通道,如果是灰度图像,那就不用说了,只有一个通道,值为0,如果是彩色图像(有3个通道),那么值为0,1,2,中选择一个,对应着BGR各个通道。这个值也得用[ ]传入。
- mask:掩膜图像。如果统计整幅图,那么为none。主要是如果要统计部分图的直方图,就得构造相应的炎掩膜来计算。
- hist:灰度级的个数,需要中括号,比如[256]
- accumulate:像素值的范围,通常[0,256],有的图像如果不是0-256,比如说你来回各种变换导致像素值负值、很大,则需要调整后才可以。
三 简单实例代码
import cv2 as cv from matplotlib import pyplot as plt #画出图像的直方图 def hist_image(image): color=('blue','green','red') for i,color in enumerate(color): '分别给每一个通道绘制曲线图' hist=cv.calcHist([image],[i],None,[256],[0,256]) plt.plot(hist,color=color) plt.show() src=cv.imread('./hua.jpg') cv.namedWindow('before',cv.WINDOW_NORMAL) cv.imshow('before',src) hist_image(src) cv.waitKey(0) cv.destroyAllWindows()
效果展示
(原图)
(直方图)
四 灰度图对比度提升和限制
代码
import cv2 as cv from matplotlib import pyplot as plt # 提升对比度(默认提升),只能是灰度图像 def equalHist_image(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) cv.imshow("before", gray) # 因为只能处理灰度图像,所以输出原图的灰度图像用于对比 dst = cv.equalizeHist(gray) cv.imshow("up_duibidu", dst) # 对比度限制(自定义提示参数) def clahe_image(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # clipLimit是对比度的大小,tileGridSize是每次处理块的大小 clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(4, 4)) dst = clahe.apply(gray) cv.imshow("limit_duibidu", dst) src = cv.imread("hua.jpg") equalHist_image(src) clahe_image(src) cv.waitKey(0) cv.destroyAllWindows()