opencv图像直方图(八)

一 核心函数

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()

原文地址:https://www.cnblogs.com/angle6-liu/p/10672916.html