title: "Python实现图像直方图均衡化算法"

date: 2018-06-12T17:10:48+08:00

tags: [""]

categories: ["python"]


效果图

代码


#!/usr/bin/env python3
# coding=utf-8 import matplotlib.image as mpimg
from matplotlib import pyplot as plt
import sys
import numpy as np def equalization(gray_value):
"""
传入灰度值,对灰度值做均衡化,不需要返回,直接修改传入的参数
:param gray_value:
"""
# 统计灰度直方图
gray = np.zeros(256)
row, column = gray_value.shape
for i in range(row):
for j in range(column):
gray[gray_value[i][j]] += 1 # 计算灰度占比
gray /= (row * column)
# 显示灰度直方图
plt.subplot(2, 2, 2)
plt.plot(gray) cumsum = np.cumsum(gray) # 计算累积和 # 均衡化
# equa_t[i]=j表示原灰度值i经过均衡化后转化为灰度值j
# 255×累积和四舍五入为int型
equa_t = np.array((255 * cumsum + 0.5)).astype(np.int32)
# 统计均衡化后的灰度数量
equa_gray = np.zeros(256)
for i in range(256):
equa_gray[equa_t[i]] += gray[i]
# 显示均衡化后的直方图
plt.subplot(2, 2, 4)
plt.plot(equa_gray)
# 对原灰度矩阵做均衡化
for i in range(row):
for j in range(column):
gray_value[i][j] = equa_t[gray_value[i][j]] def run(img_path):
img_array = mpimg.imread(img_path)
plt.subplot(2, 2, 1)
plt.imshow(img_array)
img_array *= 255
img_array = img_array.astype(np.int32)
equalization(img_array[:, :, 0])
equalization(img_array[:, :, 1])
equalization(img_array[:, :, 2])
img_array = img_array.astype(np.float64)
img_array /= 255
plt.subplot(2, 2, 3)
plt.imshow(img_array) if __name__ == "__main__":
if sys.argv.__len__() <= 1:
png = input("请输入要处理的图片名:\n")
else:
png = sys.argv[1]
run(png)
plt.show()

Python实现图像直方图均衡化算法的更多相关文章

  1. opencv图像直方图均衡化及其原理

    直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均 ...

  2. 图像直方图均衡化(C#)

    关于图像直方图均衡化的原理和步骤先不作讨论,我就看看代码吧. private Bitmap picequalization(Bitmap basemap, int width, int height) ...

  3. openCV中直方图均衡化算法的理解

    直方图均衡化就是调整灰度直方图的分布,即将原图中的灰度值映射为一个新的值.映射的结果直观表现是灰度图的分布变得均匀,从0到255都有分布,不像原图那样集中.图像上的表现就是对比度变大,亮的更亮,暗的更 ...

  4. opencv python:图像直方图 histogram

    直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开 ...

  5. opencv:图像直方图均衡化

    // 直方图均衡化 Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, dst); imshow(" ...

  6. 基于Python & Opencv 图像-视频-处理算法

    Alg1:图像数据格式之间相互转换.png to .jpg(其他的请举一反三) import cv2 import glob def png2jpg(): images = glob.glob('*. ...

  7. python实现图像直方图

    目录: (一)直方图的使用 正文: (一)直方图的使用 1 from matplotlib import pyplot as plt 2 def plot_demo(image): 3 print(i ...

  8. python实现直方图均衡化,理想高通滤波与高斯低通滤波

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...

  9. OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...

随机推荐

  1. JS 的骚操作

    一.强制类型转换 1.1string强制转换为数字 //可以用*1来转化为数字((实际上是调用.valueOf方法) 然后使用Number.isNaN来判断是否为NaN,或者使用 a !== a 来判 ...

  2. 揭开JS闭包的面纱

    今天看了关于js闭包方面的文章,还是有些云里雾里,对于一个菜鸟来说,学习闭包确实有一定的难度,不说别的,能够在网上找到一篇优秀的是那样的不易. 当然之所以闭包难理解,个人觉得是基础知识掌握的不牢,因为 ...

  3. XOR UVALive - 8512 -区间线性基合并

    UVALive - 8512 题意 :给出一个包含n个元素的数组A以及一个k,接下来进行q次询问,每次询问给出 l 和 r , 要你求出从A[l] , A[l+1] , A[l + 2],...,A[ ...

  4. python3类方法与静态方法

    静态⽅法和类⽅法 转载于:https://blog.csdn.net/qq_41020281/article/details/79634707 1. 类⽅法 是类对象所拥有的⽅法,需要⽤修饰器 @cl ...

  5. vue-cli模拟后台数据交互

    作为一个前端入坑的妹子,在学习vue的道路上挣扎徘徊,由一开始的对vue一直蒙圈只知道双向数据绑定和一些'V-x'的指令,慢慢通过一个视频的学习渐渐入坑,对于我这个js基础不怎么好而且编程思维又不是很 ...

  6. [LeetCode] Design Linked List 设计链表

    Design your implementation of the linked list. You can choose to use the singly linked list or the d ...

  7. window 日志清楚

    @echo offset srcDir="D:\ApplicationLogs"set daysAgo=15forfiles /p %srcDir% /s /m *.* /d -% ...

  8. 蓝桥杯-加法变乘法(java)

    蓝桥杯第六届省赛题目-加法变乘法(java) 题目: 我们都知道:1+2+3+ ... + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+... ...

  9. Windows中使用ssh利用公钥登入远程服务器

      方式:使用 Winscp 密钥登录   我们平时开发多会使用 ftp 来上传下载文件,尤其是很多 Linux 环境下.   其实 Linux 默认是不提供 ftp 的,需要你额外安装 FTP 服务 ...

  10. 第一次OO阶段性总结

    作业一 在第一次作业发布的时候对这次作业比较掉以轻心,因为之前在暑假的时候上过先导课,对面向对象的编程思想和java的语法都比较熟悉,加上有其他的事物分心,所以到了最后一天才开始着手写代码,轻视作业的 ...