OpenCV与图像处理学习二——图像直方图与色彩空间

  • 2.4 图像直方图(Image Histogram)
    • 2.4.1 直方图的绘制
    • 2.4.2 三通道直方图绘制
  • 2.5 颜色空间
    • 2.5.1 RGB颜色空间
    • 2.5.2 HSV颜色空间(Hue、Saturation、Value)
    • 2.5.3 HSI
    • 2.5.4 CMYK(Cyan、Magenta、Yellow、black)

本次学习笔记是对上次笔记的续写,一次写太多看起来也累。。
上次笔记的连接:OpenCV与图像处理学习一——图像基础知识(1)

2.4 图像直方图(Image Histogram)

用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。横坐标左侧为纯黑、较暗区域,右侧为纯白、较亮区域。

如下图所示,两幅图的右上角都绘制了它们各自的图像直方图:

意义:是图像中像素强度分布的图形表达方式。它统计了每个强度值所具有的像素个数。CV领域借助图像直方图来实现图像的二值化。

2.4.1 直方图的绘制

函数:

cv.calcHist( images, channels, mask, histSize, ranges[, hist[, accumulate]]  )

参数:

  1. images:待统计图像,需用中括号括起来
  2. channels待统计的通道
  3. mask:这里没用到,暂时不知道干啥的。
  4. histSize:表示直方图分成多少份。
  5. ranges:表示直方图中各个像素的值,灰度值范围。

先来看一下单通道的统计:

from matplotlib import pyplot as plt
import cv2
import numpy as np
img = cv2.imread('girl.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)plt.imshow(img_gray, cmap=plt.cm.gray)
hist = cv2.calcHist([img], [0], None, [256], [0, 256])plt.figure()
plt.title("Grayscale Histogram")
plt.xlabel("Bins")
plt.ylabel("# of Pixels")
plt.plot(hist)
plt.xlim([0, 256])
plt.show()

这里只统计了第一个通道的直方图,结果如下所示:

2.4.2 三通道直方图绘制

看一下三个通道的例子:

from matplotlib import pyplot as plt
import cv2
girl = cv2.imread("girl.jpg")
cv2.imshow("girl", girl)
color = ("b", "g", "r")
#使用for循环遍历color列表,enumerate枚举返回索引和值
for i, color in enumerate(color):hist = cv2.calcHist([girl], [i], None, [256], [0, 256])plt.title("girl")plt.xlabel("Bins")plt.ylabel("num of perlex")plt.plot(hist, color = color)plt.xlim([0, 260])
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

看一下结果:


由此可见,三通道的彩色图里的像素值的分布是不一样的。

2.5 颜色空间

颜色空间也称彩色模型/彩色空间/彩色系统,用途是在某些标准下用通常可接受的方式对彩色加以说明。

常见的颜色空间有RGB、HSV、HSI以及CMYK,下面分别来看一下。

2.5.1 RGB颜色空间

主要用于计算机图形学中,依据人眼识别的颜色创建,图像中每一个像素都具有R、G、B三个颜色分量组成,均属于[0,255]。通常表示某个颜色时,写成一个3维向量形式(110,150,130)。

RGB颜色模型

  • 原点对应的颜色为黑色,三分量均为0。
  • 距离原点最远的顶点对应颜色为白色,三分量均为1。
  • 从黑色到白色的灰度值分布在这两点的连线上,该虚线称为灰度线。
  • 立方体其余各点对应不同颜色,即三原色红、绿、蓝及其混合色黄、品红、青色。

2.5.2 HSV颜色空间(Hue、Saturation、Value)

根据颜色直观特性由A.R.Smith在1978年创建的一种颜色空间,参数分别是:色调(Hue)、饱和度(Saturation)、明度( Value)。

HSV颜色模型

  • H通道:Hue,色调/色彩,代表颜色,0°对应红色,120°对应绿色,240°对应蓝色。
  • S通道:Saturation,饱和度,取值范围:0%~100%,值越大,越饱和。
  • V通道:Value,明暗,数值越大越亮,0%(黑)到100%(白)。

RGB空间与HSV空间转化:

import cv2
# 色彩空间转换函数
def color_space_demo(image):gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)cv2.imshow('gray', gray)hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# print(hsv)cv2.imshow('hsv', hsv)
# 读入一张彩色图
src = cv2.imread('girl.jpg')
cv2.imshow('before', src)
# 调用color_space_demo函数进行色彩空间转化
color_space_demo(src)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下所示:

2.5.3 HSI

由美国色彩学家孟塞尔于1915年提出,它反映了人视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色,即把HSV中的明度换成了强度I。

HSI颜色模型

模型优点:

  • 在处理彩色图像时,可仅对I分量进行处理,结果不改变原图像中的彩色种类。
  • HSI模型完全反映了人感知颜色的基本属性,与人感知颜色的基本属性,与人感知颜色的结果一一对应。

2.5.4 CMYK(Cyan、Magenta、Yellow、black)

应用于印刷工业,印刷业通过青(C)、品(M)、黄(Y)三原色油墨的不同网点面积率的叠印来表现丰富多彩的颜色和阶调,这便是三原色的CMY颜色空间。

OpenCV与图像处理学习二——图像直方图与色彩空间相关推荐

  1. OpenCV与图像处理学习五——图像滤波与增强:线性、非线性滤波、直方图均衡化与Gamma变换

    OpenCV与图像处理学习五--图像滤波与增强:线性.非线性滤波.直方图均衡化与Gamma变换 三.图像滤波与增强 3.1 线性滤波 3.1.1 方框滤波 3.1.2 均值滤波 3.1.3 高斯滤波 ...

  2. OpenCV与图像处理学习八——图像边缘提取(Canny检测代码)

    OpenCV与图像处理学习八--图像边缘提取(Canny检测代码) 一.图像梯度 1.1 梯度 1.2 图像梯度 二.梯度图与梯度算子 2.1模板卷积 2.2 梯度图 2.3 梯度算子 2.3.1 R ...

  3. OpenCV与图像处理学习一——图像基础知识、读入、显示、保存图像、灰度转化、通道分离与合并

    OpenCV与图像处理学习一--图像基础知识.读入.显示.保存图像.灰度转化.通道分离与合并 一.图像基础知识 1.1 数字图像的概念 1.2 数字图像的应用 1.3 OpenCV介绍 二.图像属性 ...

  4. OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽

    OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...

  5. 计算机图像处理实验二 图像直方图及灰度变换

    一.实验目的与要求 1.掌握图像灰度直方图的概念及其计算方法,编写灰度直方图统计程序. 2.通过对图像直方图的分析,学习应用直方图法解决诸如图像二值化等具体问题. 3.熟悉直方图均衡化的计算过程及其应 ...

  6. OpenCV与图像处理学习十二——图像形状特征之HOG特征

    OpenCV与图像处理学习十二--图像形状特征之HOG特征 一.图像特征理解 1.1 颜色特征 1.2 纹理特征 1.3 形状特征 1.4 空间关系特征 二.形状特征描述 2.1 HOG特征 2.1. ...

  7. OpenCV与图像处理学习十四——SIFT特征(含代码)

    OpenCV与图像处理学习十四--SIFT特征(含代码) 一.SIFT算法 二.SIFT实现过程 三.代码实现 一.SIFT算法 SIFT, 即尺度不变特征变换算法(Scale-invariant f ...

  8. OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)

    OpenCV与图像处理学习七--传统图像分割之阈值法(固定阈值.自适应阈值.大津阈值) 一.固定阈值图像分割 1.1 直方图双峰法 1.2 OpenCV中的固定阈值分割 二.自动阈值图像分割 2.1 ...

  9. OpenCV与图像处理学习十七——OpenCV人脸检测(含代码)

    OpenCV与图像处理学习十七--OpenCV人脸检测(含代码) 一.人脸识别概要 1.1 人脸检测 1.2 人脸对齐(Face Alignment) 1.3 人脸特征提取(Face Feature ...

最新文章

  1. ASP.NET重用代码技术 - 代码绑定技术
  2. MongoDB 正则表达式
  3. 持续集成mysql_DevOps安装、部署持续集成
  4. 互联网广告系统综述四定向
  5. oracle中制作副本,创建表的副本并在创建时为其提供约束
  6. Go语言学习笔记——Go语言数据类型
  7. 机器学习技术在植物病害识别中的对比分析(迁移学习做了基础实验)
  8. 什么是冷区热区_墙角装个小柜子 冷区立马变热区 有颜值还实用!
  9. 国内Android源码下载教程
  10. statsmodels.stats.proportion.proportions_ztest
  11. 运行 Clojure 编程实战 5.3 节代码出现 Could not locate Clojure resource on classpath 问题
  12. 关于谷歌的一个简单工具以及chrome浏览器更新方法
  13. STM32核心板设计——电源设计
  14. 并查集入门+初级专题训练
  15. 安装postman工具 出现请设置注册表项HKLM\Software\Microsoft\.NETFramework\InstallRoot,指向.NET Fra
  16. HDU 4512 吉哥系列故事――完美队形I(最长公共上升子序列)
  17. 腾讯第一批开发工程师徐钢武回忆道【曾几何时我真的认为代码是这样的】
  18. 谷歌浏览器插件HackBar安装方法(详细教程)
  19. linux应用程序注册表,如何打开 Linux 中 Windows 程序的注册表编辑器
  20. 新辰:十种外链终极方法 让SEOer外链之路不再孤独!

热门文章

  1. 用python生成云词汇_用python生成词云wordcloud
  2. 分布式块存储系统Ursa的设计与实现
  3. 用微前端的方式搭建类单页应用
  4. 第七章 二叉搜索树(b3)BST:删除
  5. 判断jQuery选择器结果为空 - CSDN博客
  6. accp8.0转换教材第1章多线程理解与练习
  7. 【代码笔记】iOS-实现网络图片的异步加载和缓存
  8. 多线程的单元测试工具 - GroboUtils
  9. Repository 返回 IQueryable?还是 IEnumerable?
  10. 验证occ和vtk整合工作的demo