直方图

图像直方图指的是描述图像的强度分布,一般来说横轴为0-255,纵轴为横轴像素值对应的像素个数。

opencv直方图

img = cv.imread('XXX')
hist = cv.calcHist([img],[0],None,[256],[0,256])

参数说明:

  1. images : 类型为int8或float32的源图片。
  2. 图像图层索引。如果输入的是灰度图像,则是[0]。对于彩色图像,通过[0] 、[1]或[2]来分别计算蓝色、绿色或红色通道的直方图。
  3. mask:掩膜图像。要还原完整的直方图,则为none。但如果想找到特定区域的直方图,必须自己创造一个掩码图像,然后将其掩码。
  4. histSize:这代表我们的BIN计数。需要在方括号中给出,一般为256
  5. range:这是我们的RANGE。通常情况下,它是[0,256]。
import cv2
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltimg = cv.imread(r'XXXXX')
img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)hist_full = cv.calcHist([img],[0],None,[256],[0,256] )plt.subplot(121), plt.imshow(img, 'gray')
plt.subplot(122), plt.plot(hist_full)plt.show()

mask的运用

(其实我认为实现这个功能,直接截取原图像生成新,再运用上述方法会更简单易懂)

import cv2
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltimg = cv.imread(r'XXXX')img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# 创建一个掩码
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:400, 100:400] = 255
masked_img = cv.bitwise_and(img,img,mask = mask)
# 计算带掩膜和不带掩膜的直方图
# 检查第三个参数的掩膜
hist_full = cv.calcHist([img],[0],None,[256],[0,256] )
hist_mask = cv.calcHist([img],[0],mask,[256],[0,256] )
plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask,'gray')
plt.subplot(223), plt.imshow(masked_img, 'gray')
plt.subplot(224), plt.plot(hist_full),plt.plot(hist_mask)plt.show()

图像的均衡化

原理即matlab实现:

图像均衡化---MATLAB实现_独憩的博客-CSDN博客

opencv实现:

equ = cv.equalizeHist(img)
import cv2
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltimg = cv.imread(r'XXXX')img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
hist1 = cv.calcHist([img], [0], None, [256], [0, 256])equ = cv.equalizeHist(img)
hist2 = cv.calcHist([equ], [0], None, [256], [0, 256])
res = np.hstack((img, equ))  # stacking images side-by-side
plt.imshow(res, 'gray')
plt.show()plt.figure(2)
plt.subplot(1,2,1)
plt.plot(hist1)
plt.subplot(1,2,2)
plt.plot(hist2)

可以看到,均衡化之后的图片有部分地方太亮,丢失了一些信息,故我们可以OpenCV 中应用 CLAHE。

OpenCV 中应用 CLAHE:

clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)

原理简单来说就是给原图像划分了许多小方块,大小由tileGridSize决定,每个小方块内部都独立进行均衡化处理。

import cv2
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltimg = cv.imread(r'XXXXX')img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
hist1 = cv.calcHist([img], [0], None, [256], [0, 256])
equ = cv.equalizeHist(img)
clahe = cv.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
cl1 = clahe.apply(img)hist2 = cv.calcHist([equ], [0], None, [256], [0, 256])
hist3 = cv.calcHist([cl1], [0], None, [256], [0, 256])
res = np.hstack((img,cl1, equ))  # stacking images side-by-side
plt.imshow(res, 'gray')
plt.show()plt.figure(2)
plt.subplot(1,3,1)
plt.plot(hist1)
plt.subplot(1,3,2)
plt.plot(hist2)
plt.subplot(1,3,3)
plt.plot(hist3)
plt.show()

图像直方图及其均衡化--opencv相关推荐

  1. 【opencv学习】【图像直方图和均衡化】

    今天学习图像直方图和图像均衡化 一:图像直方图 import cv2 import numpy as np import matplotlib.pyplot as plt# 图像的直方图,就是统计哪些 ...

  2. python库skimage 图像直方图局部均衡化

    函数 from skimage import exposure from skimage.morphology import disk from skimage.filters import rank ...

  3. opencv——图像直方图与反向投影

    引言 在图像处理中,对于直方图这个概念,肯定不会陌生.但是其原理真的可以信手拈来吗? 本文篇幅有点长,在此列个目录,大家可以跳着看: 分析图像直方图的概念,以及opencv函数calcHist()对于 ...

  4. opencv 绘制图像直方图,实现直方图均衡化

    直方图 直方图简单来说就是图像中每个像素值的个数统计,比如说一副灰度图中像素值为0的有多少个,1的有多少个--直方图是一种分析图像的手段: 直方图计算 opencv库计算直方图 使用 cv.calcH ...

  5. OpenCV图像处理学习二十,图像直方图均衡化原理与实现

    一.图像直方图的概念 图像直方图,是指对整个图像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图.直方图反映了图像灰度的分布情况,是图像的统计学特征.图像的灰度直方 ...

  6. Python OpenCV学习笔记之:图像直方图均衡化

    # -*- coding: utf-8 -*- """ 图像直方图均衡化 """ import cv2 import numpy as np ...

  7. matlab 增加图像对比度_计算机视觉学习笔记6 图像直方图与直方图均衡化

    图像的直方图 图像直方图表示图像中每一种像素的个数,反映了图像中每种像素值出现的频率,是图像的基本统计特征之一,具有平移,旋转,缩放不变性,广泛应用于图像处理的各个领域.比如灰度图像的阈值分割,基于颜 ...

  8. 【OpenCV应用】python处理行李图像匹配项目——图像直方图应用与明暗变换

    OpenCV--图像直方图与明暗变换应用记录 图像直方图应用与明暗变换 简单伽马变换与直方图显示 MASK特定区域直方图显示 OPENCV: 直方图均衡化 有限对比度自适应直方图均衡 二维直方图 直方 ...

  9. opencv python 实现灰度图像和彩色图像直方图全局均衡化和自适应均衡化

    首先进行简单的灰度图像的全局均衡化和自适应均衡化 import cv2 as cv import numpy as npimg = cv.imread('cun.jpg',0)# 全局直方图均衡化 i ...

  10. python opencv 直方图均衡_Python+OpenCV:全局直方图均衡化、局部直方图自适应均衡化、直方图比较(Python版)...

    1. 全局直方图均衡化 cv2.equalizeHist(src, dst=None)函数只能处理单通道的数据,src为输入图像对象矩阵,必须为单通道的uint8类型的矩阵数据.直方图均衡化可以看作是 ...

最新文章

  1. 苹果接盘倒下的无人车公司:吴恩达旗下,曾估值2亿美元,CEO及大部分员工被裁...
  2. python基础教程: 自定义函数
  3. 最近提交一个mysql5.7的bug,提醒自己以后注意写SQL要规范
  4. python读取json数据格式问题_浅谈Python中的异常和JSON读写数据的实现
  5. 修改gitignore 后不起作用
  6. 人生价值观的培养和建立
  7. 完全数--Python
  8. linux主题管理器,XFCE 主题管理器:一款单一的GUI主题管理器,更改任何XFCE主题(带预览)...
  9. 实验3-5 查询水果价格 (15 分)
  10. 【Java】java插件化开发
  11. ChinaITLab Linux实战工程师网校课程-8CD
  12. 如何求100万长度的数组的中间值元素,采用定向数组只需6个毫秒的算法
  13. 魔兽世界燃烧的远征最新服务器,魔兽世界怀旧服人口普查最新2021 5月服务器阵营比例介绍...
  14. 只要每天坚持玩游戏,人生很快就会过去
  15. 倡议书格式范文_写倡议书的格式及范文
  16. grub.cfg使用说明
  17. 【教程】PDF开发工具Spire.PDF 教程:使用C#从PDF中的特定矩形区域中提取文本
  18. matlab中多项式拟合如何给出r方,matlap拟合函数后r^2怎么求
  19. 2018年上海人工智能大会(SHAI2018)即将在上海举行
  20. android ui所见退所得,为什么我的android studio不能所见既所得

热门文章

  1. 利用threading多线程爬取王者荣耀的高清壁纸
  2. 三亚科技创新创业大赛完美落幕,珈和科技等五个企业获一等奖
  3. Unity Andriod调试
  4. 激光跟踪传感器的工作原理
  5. python爬取实习僧
  6. 2003系统服务器不设置密码,服务器2003怎么设置密码
  7. Java中WeakHashMap实现原理深究
  8. 【Python3学习】学习Python必看的几本书
  9. 对接阿里云的短信接口发送手机验证码
  10. Java 生成N位随机数的方法