Python实现图像直方图均衡化算法
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实现图像直方图均衡化算法的更多相关文章
- opencv图像直方图均衡化及其原理
直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均 ...
- 图像直方图均衡化(C#)
关于图像直方图均衡化的原理和步骤先不作讨论,我就看看代码吧. private Bitmap picequalization(Bitmap basemap, int width, int height) ...
- openCV中直方图均衡化算法的理解
直方图均衡化就是调整灰度直方图的分布,即将原图中的灰度值映射为一个新的值.映射的结果直观表现是灰度图的分布变得均匀,从0到255都有分布,不像原图那样集中.图像上的表现就是对比度变大,亮的更亮,暗的更 ...
- opencv python:图像直方图 histogram
直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开 ...
- opencv:图像直方图均衡化
// 直方图均衡化 Mat gray, dst; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, dst); imshow(" ...
- 基于Python & Opencv 图像-视频-处理算法
Alg1:图像数据格式之间相互转换.png to .jpg(其他的请举一反三) import cv2 import glob def png2jpg(): images = glob.glob('*. ...
- python实现图像直方图
目录: (一)直方图的使用 正文: (一)直方图的使用 1 from matplotlib import pyplot as plt 2 def plot_demo(image): 3 print(i ...
- python实现直方图均衡化,理想高通滤波与高斯低通滤波
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...
- OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...
随机推荐
- XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Khamovniki
A. Ability Draft 记忆化搜索. #include<stdio.h> #include<iostream> #include<string.h> #i ...
- XVIII Open Cup named after E.V. Pankratiev. Eastern Grand Prix
A. Artifacts 建立语法分析树,首先根据上下界判断是否有解,然后将所有数按下界填充,线段树判断是否存在和超过$K$的子区间. B. Brackets and Dots 最优解中一定包含一对中 ...
- X Open Cup named after E.V. Pankratiev. European Grand Prix
A. Arithmetic Rectangle 对于一行或者一列的情况可以递推求出最大值. 对于至少一行或者一列的情况,可以定义四个格子一组横向和纵向的相等关系,然后悬线法求最大子矩阵. 时间复杂度$ ...
- luo3372线段树模板的分块做法
题目大意 请你维护一个有n个元素的整数序列,要求支持区间查询&区间修改 对于100%的数据,\(1<=n<=10^5\) 分析 正常做法是线段树维护区间修改.区间查询,今天我要讲的 ...
- NOIP-玩具谜题
题目描述 小南有一套可爱的玩具小人,它们各有不同的职业. 有一天,这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外,如下图: 这时 `singer` 告 ...
- DEV_TreeList使用经验小结
1. 点击叶子节点是希望Open键显示,点击非叶子节点时希望隐藏.实践中发现点击到了非叶子节点图标,Open没有隐藏,如何解决? 增加一个判断: if (_hitInfo.HitInfoType != ...
- C++类中的Static关键字二
静态成员是可以独立访问的,也就是说,无须创建任何对象实例就可以访问,而静态成员函数可不建立对象就可以被使用. 或者说静态函数与一般函数没有太大的区别,只是访问有限制,静态变量跟一般的全局变量的区别 ...
- 报文分析3、ICMP协议的头结构
ICMP协议的头结构 类型(8位) 代码(8位) 校验和(8位) 类型或者代码 (1)类型:一个8位类型字段,表示ICMP数据包类型. (2)代码:一个8位代码域,表示指定类型中的一个功能.如果一 ...
- CSS实现标题/段落省略效果的三剑客
white-space: nowrap;overflow:hidden;text-overflow:ellipsis; 效果如下:
- 理解 Memory barrier(内存屏障)无锁环形队列
原文:https://www.cnblogs.com/my_life/articles/5220172.html Memory barrier 简介 程序在运行时内存实际的访问顺序和程序代码编写的访问 ...