• OpenCV自学笔记十六:直方图处理


    OpenCV中,直方图(Histogram)是用于表示图像中像素强度分布的一种统计工具。它可以帮助我们了解图像的亮度、对比度、色彩分布等信息。

    OpenCV提供了一个函数`cv2.calcHist()`,用于计算图像的直方图。该函数接受图像数组和一些参数,例如要计算的通道数、区间的数量等。它返回一个表示直方图的一维数组。

    OpenCV中的直方图可以有不同类型,包括灰度直方图和彩色直方图。

    1. 灰度直方图:对于灰度图像,直方图显示了每个像素强度值(0-255范围内)的频数或频率。它可以帮助我们了解图像中不同强度级别的像素数量,并根据直方图的形状来判断图像的亮度分布。

    2. 彩色直方图:对于彩色图像,直方图显示了每个通道(如红色、绿色、蓝色)的像素强度值的频数或频率。它可以帮助我们理解图像中不同颜色通道的分布情况。

    通过分析直方图,我们可以获得以下信息:

    - 对比度:直方图的峰值和分布范围可以提供关于图像对比度的信息。例如,峰值较集中的直方图可能表示高对比度图像,而峰值分布较宽的直方图可能表示低对比度图像。

    - 亮度:灰度直方图可以显示图像中不同亮度级别的像素数量,从而帮助我们判断图像的明暗程度。

    - 色彩分布:彩色直方图可以显示图像中不同颜色通道的像素数量,从而帮助我们了解图像的色彩分布情况。

    通过OpenCV中的直方图计算函数,我们可以方便地获取图像的直方图并进行进一步的图像处理、分析和视觉化。以下是一个使用OpenCV计算灰度图像直方图的示例代码:
     

    1. import cv2
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. # 读取图像并转换为灰度图像
    5. image = cv2.imread("image.jpg")
    6. gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    7. # 计算直方图
    8. hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
    9. # 绘制直方图
    10. plt.plot(hist)
    11. plt.title('Grayscale Histogram')
    12. plt.xlabel('Pixel Value')
    13. plt.ylabel('Frequency')
    14. plt.show()

    在上述示例中,首先使用`cv2.imread()`函数读取图像,并使用`cv2.cvtColor()`函数将其转换为灰度图像。

    然后,我们使用`cv2.calcHist()`函数计算灰度图像的直方图。该函数接受多个参数,包括要计算的图像、通道数、掩码等。在这里,我们只计算单通道的直方图(灰度图像),因此将通道数设置为[0]。

    `calcHist()`函数还可以指定区间数量和范围。在本例中,我们将区间数量设置为256,表示将图像像素值划分为256个区间。范围设为[0, 256],表示像素值的范围为0到255。

    最后,我们使用Matplotlib库的`plot()`函数绘制直方图,并使用`title()`、`xlabel()`和`ylabel()`函数添加标题和坐标轴标签。最后,通过调用`show()`函数显示直方图。

  • 相关阅读:
    【论文精读】Robust Alignment for Panoramic Stitching Via an Exact Rank Constraint
    【计算机组成原理】备考必刷大题
    亿万级别Kafka演进之路:可靠性+事务+消息中间件+源码+日志
    vue中使用ali-oss上传文件到阿里云上
    Java算法 每日一题(十一) 编号20:有效的括号
    【问题解决】Maven密码加密
    springboot+党员信息管理系统 毕业设计-附源码161528
    【计算机网络】IP协议
    编程的简单实例,编程零基础入门教程,中文编程开发语言工具下载
    【C++】内存管理——new与delete
  • 原文地址:https://blog.csdn.net/m0_71721954/article/details/133145392