【个人笔记】OpenCV4 C++ 快速入门 26课
个人资料,仅供学习使用
修改时间——2022年2月13日 20:49:07
学习课程:OpenCV4 C++ 快速入门视频30讲
视频老师:贾志刚
26 直方图均衡化
opencv知识点:
- 均衡灰度图像的直方图 - equalizeHist
本课所解决的问题:
- 什么是图像直方图均衡化?
- 如何均衡化灰度图像的直方图?
- 如何均衡化彩色图像的直方图?
1.图像直方图均衡化
在opemcv中,实现图像直方图均衡化并不难,但如何理解却要花点时间。
所以在本课的开始,我们来先来了解一下图像直方图均衡化相关的知识
直方图均衡化引入
作者:云时之间
链接:数字图像处理:直方图均衡化
话说回直方图,我们引入直方图,很大程度上是为了让我们可以根据直方图的形态,判断图像的质量,比如根据下图所示,会很快发现一张图片是过亮还是过暗
如果直方图偏暗,偏亮或者亮度过于集中,我们就要对直方图进行修整
在数字图像处理中关于直方图的修整,有两种方法:
- 直方图均衡化
- 直方图规定化
我们本课涉及的直方图均衡化,就是比较常用的那一种
直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。
其基本思想是
- 对在图像中像素个数多的灰度级进行展宽
- 对像素个数少的灰度级进行缩减。
从而达到清晰图像的目的。
直方图均衡化原理
现在我们举一个例子说明它的原理
假设有一幅图像64*64大小,共有4096个像素,8个灰度级各灰度级概率分布见下表 ,试将其直方图均匀化。
k | 灰度级rk | 像素数nk | 概率Pk(rk) |
---|---|---|---|
0 | 0 | 790 | 0.19 |
1 | 1/7 | 1023 | 0.25 |
2 | 2/7 | 850 | 0.21 |
3 | 3/7 | 656 | 0.16 |
4 | 4/7 | 329 | 0.08 |
5 | 5/7 | 245 | 0.06 |
6 | 6/7 | 122 | 0.03 |
7 | 7/7 | 81 | 0.02 |
推导如下:
首先计算直方图概率的累加值S(i),直到最后一个灰度级,总和为1
然后根据公式求取像素映射关系.
得到如下的映射关系
这样就找到了原图像和均衡化图像灰度的对应关系。
如果再对原图进行操作,将每个像素映射成新的像素,就完成了图像均衡化。
直方图均衡化用途
图像直方图均衡化可以用于图像增强、对输入图像进行直方图均衡化处理,提升后续对象检测的准确率等。
它在OpenCV人脸检测的代码演示中已经很常见。
此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量。
引用文章:
直方图均衡化
数字图像处理:直方图均衡化
2.灰度图像直方图均衡化
在opencv中,如果要实现灰度图像直方图的均衡化,只要用到一个API
- equalizeHist
具体介绍如下
equalizeHist均衡灰度图像的直方图共2个参数第1个参数 输入第2个参数 输出
演示如下
//函数定义
void histogram_eq_demo(Mat& image);
//函数实现
void QuickDemo::histogram_eq_demo(Mat& image) {Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);imshow("灰度图像", gray);Mat dst;equalizeHist(gray, dst);imshow("直方图均衡化演示",dst);}
3.彩色图像直方图均衡化
从上文我们可以知道,直方图均衡化就是对亮度的一个调整,使之分布均匀
而在HSV色彩空间中,V通道关于亮度的,所以我们实现彩色图像的均衡化可以从V通道着手。
步骤如下
- 先把图像色彩空间转为HSV,并把HSV三个通道分离
- 然后V通道进行均衡化,再把三个通道合并
- 最后转回BGR色彩空间
这样就实现了彩色图像直方图的均衡化
void QuickDemo::histogram_eq_demo(Mat& image) {Mat hsv,dst[3],src;cvtColor(image,hsv, COLOR_BGR2HSV);split(hsv, dst);equalizeHist(dst[2], dst[2]);merge(dst,3,src);cvtColor(src, src,COLOR_HSV2BGR);imshow("00",src);}
本课所查阅API
equalizeHist
merge
【个人笔记】OpenCV4 C++ 快速入门 26课相关推荐
- 【个人笔记】OpenCV4 C++ 快速入门 23课
个人资料,仅供学习使用 修改时间--2022年1月26日 00:49:43 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 23 视频处理与保存 opencv知识点: Vide ...
- 【个人笔记】OpenCV4 C++ 快速入门 29课
个人资料,仅供学习使用 修改时间--2022年2月19日 15:02:27 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 29 高斯双边模糊 opencv知识点: 高斯双边模 ...
- 【个人笔记】OpenCV4 C++ 快速入门 25课
个人资料,仅供学习使用 修改时间--2022年2月13日 20:45:23 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 25 二维直方图 opencv知识点: 计算直方图数 ...
- 【个人笔记】OpenCV4 C++ 快速入门 22课
个人资料,仅供学习使用 修改时间--2022年1月25日 22:09:17 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 22 视频文件摄像头使用 opencv知识点: VI ...
- 【个人笔记】OpenCV4 C++ 快速入门 20课
个人资料,仅供学习使用 修改时间--2022年1月24日 22:09:02 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 20 图像翻转 opencv知识点: 图像翻转 - ...
- 【个人笔记】OpenCV4 C++ 快速入门 19课
个人资料,仅供学习使用 修改时间--2022年1月24日 20:17:13 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 19 图像放缩与插值 opencv知识点: 图像放缩 ...
- 【个人笔记】OpenCV4 C++ 快速入门 17课
个人资料,仅供学习使用 修改时间--2022年1月23日 17:59:14 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 17 鼠标操作与响应 opencv知识点: 设置指定 ...
- 【个人笔记】OpenCV4 C++ 快速入门 14课
个人资料,仅供学习使用 修改时间--2022年2月13日 09:47:32 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 14 图像几何形状绘制 opencv知识点: 四种几 ...
- 【个人笔记】OpenCV4 C++ 快速入门 13课
个人资料,仅供学习使用 修改时间--2022年2月13日 09:03:23 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 13 图像像素值统计 opencv知识点: 图像像素 ...
最新文章
- DeepMind推出分布式深度强化学习架构IMPALA,让一个Agent学会多种技能
- maven deploy jar包到远程仓库400
- 曝!BAT大厂NLP学习进阶之法~
- Remoting系列专题---构建Remoting“防火墙”
- [Bzoj4260]Codechef REBXOR(trie树)
- C++PrimerPlus学习——第十四章编程练习
- 爬虫案例:利用python爬虫关键词批量下载高清大图
- 表空间(tableSpace) 段(segment) 盘区(extent) 块(block) 关系
- java servletlis_Java学习(六)servlet 的引入
- 【SSM 1】SpringMVC、Spring和Struts的区别
- 给妹子讲python-S01E01好用的列表
- 配置php apache,apache如何配置php
- 第1章:BPSK调制解调器
- 使用Py-OpenCV(SIFT关键点)实现自然图像中的logo商标识别和定位
- java lifo_java:stack栈: Stack 类表示后进先出(LIFO)的对象堆栈
- 美食探店的文章怎么写?有什么技巧
- 仿照微信写的uni-app项目
- 情话套路大全,哈哈哈~~~
- Sql 语句小课堂7:在sqlserver对多行数据实施随机数
- 编译原理和离散数学 考研