1. cv2.equalizeHist(img)  # 表示进行直方图均衡化

参数说明:img表示输入的图片

2.cv2.createCLAHA(clipLimit=8.0, titleGridSize=(8, 8))  用于生成自适应均衡化图像

参数说明:clipLimit颜色对比度的阈值, titleGridSize进行像素均衡化的网格大小,即在多少网格下进行直方图的均衡化操作

直方图均衡化:一般可以用来提升图片的亮度, 在上面一节中,我们可以看出在150-200之间所占的频数特别的大,频数均衡化指的是让频数的分布看起来更加均匀一些

主要实现的手段

上图中的左边的图是原始数据, 右边的图是进行函数映射后的灰度值

首先对各个灰度值做频数统计,计算其概率,根据像素的灰度值计算出累积概率,最后将累积概率 * (255-0) 做为函数映射后的灰度值,

这样做的目的,可以使得灰度值之间的间隔更小,即一些频数较大的灰度值补充给了频数较小的灰度值,从而实现了灰度值的均衡化

代码:

第一步:读入图片

第二步:使用cv2.equalizeHist(img)均衡化像素

第三步:使用plt.hist 画出均衡化的直方图

第四步:使用plt.imshow 画出均衡化后的图像

import cv2
import numpy as np
import matplotlib.pyplot as plt # 第一步:读入图片
img = cv2.imread('cat.jpg', 0) # 第二步: 使用cv2.equalizeHist实现像素点的均衡化
ret = cv2.equalizeHist(img) # 第三步:使用plt.hist绘制像素直方图
plt.subplot(121)
plt.hist(img.ravel(), 256)
plt.subplot(122)
plt.hist(ret.ravel(), 256)
plt.show() # 第四步:使用cv2.imshow()绘值均衡化的图像
cv2.imshow('ret', np.hstack((img, ret)))
cv2.waitKey(0)

这种全局的均衡化也会存在一些问题,由于整体亮度的提升,也会使得局部图像的细节变得模糊,因为我们需要进行分块的局部均衡化操作

代码:

第一步:使用cv2.createCLAHE(clipLimit=2.0, titleGridSize=(8, 8)) 实例化均衡直方图函数
第二步:使用.apply进行均衡化操作

第三步:进行画图操作

# 使用自适应直方图均衡化
# 第一步:实例化自适应直方图均衡化函数
clahe = cv2.createCLAHE(clipLimit=2.0,
tileGridSize=(8, 8)) # 第二步:进行自适应直方图均衡化
clahe = clahe.apply(img) # 第三步:进行图像的展示
cv2.imshow('imgs', np.hstack((img, ret, clahe)))
cv2.waitKey(0)
cv2.destroyAllWindows()

可以看出自适应均衡化没有使得人物脸部的细节消失

机器学习进阶-直方图与傅里叶变化-直方图均衡化 1.cv2.equalizeHist(进行直方图均衡化) 2. cv2.createCLAHA(用于生成自适应均衡化图像)的更多相关文章

  1. 机器学习进阶-直方图与傅里叶变换-图像直方图 1.cv2.calc(生成图像的像素频数分布(直方图))

    1. cv2.calc([img], [0], mask, [256], [0, 256])  # 用于生成图像的频数直方图 参数说明: [img]表示输入的图片, [0]表示第几个通道, mask表 ...

  2. 机器学习进阶-直方图与傅里叶变换-傅里叶变换(高低通滤波) 1.cv2.dft(进行傅里叶变化) 2.np.fft.fftshift(将低频移动到图像的中心) 3.cv2.magnitude(计算矩阵的加和平方根) 4.np.fft.ifftshift(将低频和高频移动到原来位置) 5.cv2.idft(傅里叶逆变换)

    1. cv2.dft(img, cv2.DFT_COMPLEX_OUTPUT) 进行傅里叶变化 参数说明: img表示输入的图片, cv2.DFT_COMPLEX_OUTPUT表示进行傅里叶变化的方法 ...

  3. 机器学习进阶-案例实战-答题卡识别判 1.cv2.getPerspectiveTransform(获得投射变化后的H矩阵) 2.cv2.warpPerspective(H获得变化后的图像) 3.cv2.approxPolyDP(近似轮廓) 4.cv2.threshold(二值变化) 7.cv2.countNonezeros(非零像素点个数)6.cv2.bitwise_and(与判断)

    1.H = cv2.getPerspectiveTransform(rect, transform_axes) 获得投射变化后的H矩阵 参数说明:rect表示原始的位置左上,右上,右下,左下, tra ...

  4. 机器学习进阶-案例实战-图像全景拼接-图像全景拼接(RANSCA) 1.sift.detectAndComputer(获得sift图像关键点) 2.cv2.findHomography(计算单应性矩阵H) 3.cv2.warpPerspective(获得单应性变化后的图像) 4.cv2.line(对关键点位置进行连线画图)

    1. sift.detectAndComputer(gray, None)  # 计算出图像的关键点和sift特征向量 参数说明:gray表示输入的图片 2.cv2.findHomography(kp ...

  5. 机器学习进阶-图像形态学操作-开运算与闭运算 1.cv2.morphologyEx(进行各类形态学变化) 2.op=cv2.MORPH_OPEN(先腐蚀后膨胀) 3.op=cv2.MORPH_CLOSE(先膨胀后腐蚀)

    1.cv2.morphologyEx(src, op, kernel) 进行各类形态学的变化 参数说明:src传入的图片,op进行变化的方式, kernel表示方框的大小 2.op =  cv2.MO ...

  6. 机器学习进阶-目标跟踪-KCF目标跟踪方法 1.cv2.multiTracker_create(构造选框集合) 2. cv2.TrackerKCF_create(获得KCF追踪器) 3. cv2.resize(变化图像大小) 4.cv2.selectROI(在图像上框出选框)

    1. tracker = cv2.multiTracker_create() 获得追踪的初始化结果 2.cv2.TrackerKCF_create() 获得KCF追踪器 3.cv2.resize(fr ...

  7. 机器学习进阶-目标追踪-SSD多进程执行 1.cv2.dnn.readnetFromCaffe(用于读取已经训练好的caffe模型) 2.delib.correlation_tracker(生成追踪器) 5.cv2.writer(将图片写入视频中) 6.cv2.dnn.blobFromImage(图片归一化) 10.multiprocessing.process(生成进程)

    1. cv2.dnn.readNetFromCaffe(prototxt, model)  用于进行SSD网络的caffe框架的加载 参数说明:prototxt表示caffe网络的结构文本,model ...

  8. 机器学习进阶-光流估计 1.cv2.goodFeaturesToTrack(找出光流估计所需要的角点) 2.cv2.calcOpticalFlowPyrLK(获得光流检测后的角点位置) 3.cv2.add(进行像素点的加和)

    1.cv2.goodFeaturesToTrack(old_gray, mask=None, **feature_params)  用于获得光流估计所需要的角点参数说明:old_gray表示输入图片, ...

  9. 机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)

    7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的 ...

随机推荐

  1. redis集群服务启动

    1 启动redis服务器 redis-server.exe redis.windows.conf 需要配置config节点的bind ip 2 启动redis集群 开启redis.xx.conf 服务 ...

  2. python基础介绍

    一. 1.计算机基础 cpu:运算和控制:速度:飞机 内存:临时存储,供给cup数据,断电数据清空.成本高,速度:高铁 硬盘:相当于电脑的数据库,存储大量数据,数据永久保存(除非物理结构被破坏).速度 ...

  3. [UE4]UMG编辑器:中心点对齐

  4. typescript静态属性,静态方法,抽象类,多态

    /* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": "./js", 2.第二步 任务 ...

  5. 在html中用js代替${pagecontext.request.getcontextpath}这样就不用使用jsp了

    var pathArray = window.location.pathname.split('/');  var secondLevelLocation = pathArray[1];  var l ...

  6. C# 公共类

    https://github.com/Jimmey-Jiang/Common.Utility/tree/master/Utility%E5%9F%BA%E7%A1%80%E7%B1%BB%E5%A4% ...

  7. CGo中传递多维数组给C函数

    转自:http://www.cnblogs.com/cobbliu/p/5035358.html package main /* #include <stdio.h> #include & ...

  8. Nginx 分布式session共享问题

    在集群的时候每次访问,都会被代理转到不同的服务器,那么在这些服务器之间如何共享session? 解决方式1:session复制 只能在window下好使,web服务器解决(广播机制,将一台机器上的se ...

  9. Devlopment Env Setup install ubuntu16.04

    http://blog.csdn.net/ljheee/article/details/52966048 1.add chinese language support settings -> i ...

  10. django-request获取数据

    request 如果说 urls.py 是 Django 中前端页面和后台程序桥梁,那么 request 就是桥上负责运输的小汽车 可以说后端接收到的来至前端的信息几乎全部来自于requests中. ...