6

Python 计算机视觉(七)—— OpevCV进行直方图统计

 2 years ago
source link: https://blog.csdn.net/qq_52309640/article/details/120927711
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本文中涉及到的 matplotlib 绘图库的知识可以参考我的之前的文章:Python 绘图库 Matplotlib

目录

1. 直方图概述

(1)基本概念

(2)直方图中的术语

BINS

DIMS

RANGE

2. 直方图绘制

(1)读取图像信息

(2)绘制直方图

灰度图的直方图 

彩色图直方图

3. 掩膜直方图

(1)基本概念

(2)实现代码

得到掩模图

绘制掩膜直方图 

4. H-S 直方图

(1)基本概念

(2)绘制二维H-S直方图

结束语


1. 直方图概述

(1)基本概念

       直方图就是对图像的另外一种解释,它描述了整幅图像的灰度分布。直方图的 x 轴代表灰度值(0~255),y 轴代表图片中同一种灰度值的像素点的数目,所以通过直方图我们可以对图像的亮度、灰度分布、对比度等有了一个直观的认识

(2)直方图中的术语

BINS

       前面说到,直方图中的 x 轴表示的是灰度值,一幅灰度图的灰度等级有 256 级,所以我们是否需要将每一个等级标注在一条轴上呢?或者如果我们需要的不是每一个灰度值的分布,而是一个范围内的灰度分布呢?所以我们将每一个需要的灰度值范围称为一个 BIN,即所有的灰度等级被分为几个小组,每一个小组是一个 BIN

       代表的是我们收集的图像的参数的数目,直方图我们如果只收集灰度值一个参数,那么该参数的值就是1

RANGE

       代表统计的灰度值的范围,一般的范围是[0-255]

2. 直方图绘制

(1)读取图像信息

       在计算机视觉系列的文章中第一件事就是读取图像信息:

图像信息如下:

419 636 

(2)绘制直方图

绘制直方图使用的函数如下:

hist = cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)
images:原图
channels:指定通道 [0]代表灰度图,如果读入的图像不是灰度图,该值可以是[0],[1],[2]分别代表通道 B,G,R
mask:掩码图像,进行整张图的绘制时为 None
histSize:BIN 的数量
ranges:像素值范围
accumulate:累计标识,一般可以省略

灰度图的直方图 

      可以看出这幅灰度图中亮度较高的像素点还是占多数的,即整体亮度较高

彩色图直方图

读入彩色图像,并对某一个通道进行直方图绘制

上图就是对蓝色通道绘制的直方图 

3. 掩膜直方图

(1)基本概念

       如果我们不需要整幅图像中的直方图,而是某个区域的直方图,我们只需要绘制一幅图,将需要统计的部分设置为白色,不需要统计的部分设置为黑色,就构成了一幅掩膜图像

(2)实现代码

得到掩模图

绘制掩膜直方图 

得到的图像如下:

4. H-S 直方图

(1)基本概念

        H(Hue) - S(Saturation) 直方图,即色调 - 饱和度直方图

 绘制该直方图需要将源RGB图像转化到 HSV (色调、饱和度、亮度)颜色空间中去

对于HSV空间的介绍可以参考:图像处理(HSV)

(2)绘制二维H-S直方图

此处参考:OpenCV 官网

得到的图像如下:

        上图中的 X 轴代表S(饱和度),Y轴代表H(色调) 

        该图中的峰值主要分布在 S 在(0-50)之间 H在(20-80),至于为什么峰值较少,个人猜测是由于原图中的色彩变化不明显,导致没办法绘制出过多过明显的峰值

       本篇文章简单介绍了图像直方图的概念,并进行了直方图、掩膜直方图、H-S 直方图的绘制,参考的一些文章都添加在了原文中,如果需要深入了解可以点进去进行学习,加油!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK