一、学习目标

  1. 了解了均衡化的作用是什么
  2. 了解灰度、YUV、彩色图片均衡化的方法是使用什么方法
  3. 了解了合并通道的方法是什么
  4. 了解了分离通道的方法是什么

如有错误欢迎指出~

二、了解图像均衡化

2.1 了解直方图均衡化

图像直方图均衡化主要是对图像中的少数灰度进行压缩,扩展该值的范围,以致于让这个图的对比度调高,使当前图像变得更加清晰。在一张图片中,若整体偏亮,直方图的值应该是在偏右侧,就可能会产生过渡曝光;若一张图像的直方图整体偏暗就会导致直方图呈现数值整体偏左,可能会造成过暗不清晰,所以一张图是否看起来舒服应该在直方图中的布局显示会相对于均衡。

直方图均衡化有三种,分别是灰度图像直方图、彩色图像直方图以及YUV直方图均衡化。

2.2 灰度图像均衡化

需要实现直方图均衡化需要使用equalizeHist方法。equalizeHist方法使用很简单,直接传入图片进去即可。首先我们需要读取一张图片,并且将改图片转换成一张灰度图片:

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\mx\Desktop\ganimg.png', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

随后调用equalizeHist方法,完整代码如下:

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\mx\Desktop\ganimg.png', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.namedWindow("equalizeHist_gray_img",cv2.WINDOW_NORMAL)equalizeHist_gray_img = cv2.equalizeHist(gray)
cv2.imshow("equalizeHist_gray_img", equalizeHist_gray_img)
cv2.imshow("Image", gray)cv2.waitKey (0)
cv2.destroyAllWindows()

结果如下:
很明显,通过均衡化后,感觉舒服太多了。上图左侧为均衡化图,右侧为原图。

2.3 彩色图像均衡化

彩色图像均衡化也是非常简单。opencv提供了一个split方法,直接传入图片可以分离通道。代码如下:

b,g,r = cv2.split(img)

随后对每个通道进行均衡化:

equalizeHist_b=cv2.equalizeHist(b)
equalizeHist_g=cv2.equalizeHist(g)
equalizeHist_r=cv2.equalizeHist(r)

这时候需要将进行均衡化后的值进行合并,合并三个通道成为一张彩色图片,这时需要使用merge方法。merge方法将三个通道传入其中作为参数,返回的结果就是合并后的彩色图像值。代码如下:

merge_img=cv2.merge((equalizeHist_b, equalizeHist_g, equalizeHist_r))

最终完整的代码如下:

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\mx\Desktop\ganimg.png', 1)
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.namedWindow("merge_img",cv2.WINDOW_NORMAL)b,g,r = cv2.split(img)
equalizeHist_b=cv2.equalizeHist(b)
equalizeHist_g=cv2.equalizeHist(g)
equalizeHist_r=cv2.equalizeHist(r)merge_img=cv2.merge((equalizeHist_b, equalizeHist_g, equalizeHist_r))
cv2.imshow("merge_img", merge_img)
cv2.imshow("Image", img)cv2.waitKey (0)
cv2.destroyAllWindows()

结果如下:

这时候的图片看起来就不难受了,是非常舒服的。

YUV均值化也是非常的简单,都是通过equalizeHist方法在此不浪费阅读时间直接上代码:

import cv2
import numpy as npimg = cv2.imread(r'C:\Users\mx\Desktop\ganimg.png', 1)
YUV_img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
YUV_img_c = cv2.split(YUV_img)
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.namedWindow("YUV_img_merge",cv2.WINDOW_NORMAL)YUV_img_c[0] = cv2.equalizeHist(YUV_img_c[0])
YUV_img_merge = cv2.merge(YUV_img_c)
YUV_img_c_= cv2.cvtColor(YUV_img_merge, cv2.COLOR_YCrCb2BGR)
cv2.imshow("YUV_img_merge", YUV_img_c_)
cv2.imshow("Image", img)cv2.waitKey (0)
cv2.destroyAllWindows()

结果如下:

2.4 折线数据对比

我们刚刚知道了如何对图片进行明亮上的修改,我们现在从折线图的角度看一下两者之间的数据是否有什么变化,为了查看数据的不同,我先贴上折线图的核心代码:

color = ["blue", "green"]
imgs=[YUV_img_c_,img]
for i, v in enumerate(imgs):hist = cv2.calcHist([v], [i], None, [256], [0, 256])plt.plot(hist, color=color[i])
plt.show()

以上是对比YUV与原图的数据折线图对比。首先我们定义一个color列表,分别用于显示两个不同图片数据的线段颜色;随后定义一个imgs列表,用来存储两张图。之后使用一个for循环imgs内容,使用calcHist随便取一个通道值查看内容值,随后再使用plot对图像进行绘制。完整代码如下:

import cv2
import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread(r'C:\Users\mx\Desktop\ganimg.png', 1)
YUV_img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)
YUV_img_c = cv2.split(YUV_img)
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.namedWindow("YUV_img_merge",cv2.WINDOW_NORMAL)YUV_img_c[0] = cv2.equalizeHist(YUV_img_c[0])
YUV_img_merge = cv2.merge(YUV_img_c)
YUV_img_c_= cv2.cvtColor(YUV_img_merge, cv2.COLOR_YCrCb2BGR)
cv2.imshow("YUV_img_merge", YUV_img_c_)
cv2.imshow("Image", img)color = ["blue", "green"]
imgs=[YUV_img_c_,img]
for i, v in enumerate(imgs):hist = cv2.calcHist([v], [i], None, [256], [0, 256])plt.plot(hist, color=color[i])
plt.show()cv2.waitKey (0)
cv2.destroyAllWindows()

结果如下:
其中蓝色是做过均衡化处理后的数据,绿色是没做均衡化处理的原图。从结果上可以看出,两者的均衡化之间相差是非常巨大的。
该系列首发于ebaina

三、总结

  1. 了解了均衡化的作用是增加图片对比度
  2. 了解灰度、YUV、彩色图片均衡化的方法是使用equalizeHist方法
  3. 了解了合并通道的方法是merge
  4. 了解了分离通道的方法是split

[python opencv 计算机视觉零基础到实战] 十三 直方图颜色提鲜相关推荐

  1. [python opencv 计算机视觉零基础到实战] 十一找到图片中指定内容

    一.学习目标 了解图片内容定位方法matchTemplate使用 了解minMaxLoc方法使用 上一篇<[python opencv 计算机视觉零基础到实战] 十.图片效果毛玻璃> 如有 ...

  2. [python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃

    一.学习目标 了解高斯模糊的使用方法 了解毛玻璃的图片效果添加 了解如何自己做一个噪声图片 上一篇:[python opencv 计算机视觉零基础到实战] 九.模糊 如有错误欢迎指出~ 二.了解模糊与 ...

  3. [python opencv 计算机视觉零基础到实战] 八、ROI泛洪填充

    一.学习目标 了解什么是ROI 了解floodFill的使用方法 如有错误欢迎指出~ 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[pyth ...

  4. [python opencv 计算机视觉零基础到实战] 七、逻辑运算与应用

    一.学习目标 了解opencv中图像的逻辑运算 了解opencv中逻辑运算的应用 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  5. [python opencv 计算机视觉零基础到实战] 六、图像运算

    一.学习目标 了解opencv中图像运算的方法 了解opencv中图像运算的运用 如有错误欢迎指出~ 二.了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] ...

  6. [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解

    一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...

  7. [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑

    一.学习目标 了解图片的通道与数组结构 了解使用numpy创建一个图片 了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的hell ...

  8. 【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取

    一.学习目标 了解图片的结构属性 了解如何捕获视频 了解waitkey的使用方法 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python ...

  9. [python opencv 计算机视觉零基础到实战] 一 opencv的helloworld

    前置条件 说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程:文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘 ...

最新文章

  1. HDU 4888 Redraw Beautiful Drawings(网络流求矩阵的解)
  2. android 开发--获取文件的扩展名和去掉文件的扩展名
  3. Linux环境——MySQL安装及配置(8.0版本)
  4. 快速排序的递归和非递归的实现
  5. 封装cookie.js、EventUtil.js、
  6. 如何将不带web.xml的Spring应用程序部署到Tomcat
  7. gcc与g++编译器
  8. 如何更sql sever数据库表的所有者
  9. axios 注册拦截器 cdn引用_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床
  10. SQL SERVER 只有MDF文件的恢复
  11. 中国“鸭王”失宠的第8年,终于撑不住了!
  12. pytorch1.4+tensorboard不显示graph计算图的问题
  13. codeup《算法笔记》题目索引(题目+解析+代码)
  14. 网页版视频监控系统完整版
  15. Solidworks 课程大纲(虎课网)
  16. 文件或目录损坏且无法读取怎么删除文件或目录
  17. stm32 /*定时器ETR外部时钟初始化配置
  18. 使用时间序列分解模型预测商品销量
  19. 安卓webview长按分享,长按选择,长按复制,仿好奇心日报长按分享自定义弹窗的实现
  20. 英语六级(包含作文)

热门文章

  1. WebBenchmark动态测试Webapi
  2. 怎么将SVG转成PNG(.NET工具包编写)
  3. 设计一个具有等待队列的连接池
  4. 译 | 在 Azure SQL 上节约成本的八种方法
  5. 应用交付老兵眼中的Envoy, 云原生时代下的思考
  6. ASP.NET Core on K8S深入学习(11)K8S网络知多少
  7. Natasha v2.5.4 版与运行时实战
  8. HttpClientFactory日志不好用,自己扩展一个?
  9. 树莓派 + Windows IoT Core 搭建环境监控系统
  10. ASP.NET Core 管道再探