热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用python绘制灰度直方图_用python简单处理图片(5):图像直方图

我们先来看两个函数reshape和flatten:假设我们先生成一个一维数组:vecnp.arange(15)printvec显示为:[012

我们先来看两个函数reshape和flatten:

假设我们先生成一个一维数组:

vec=np.arange(15)

print vec

显示为:

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

如果我们要把这个一维数组,变成一个3*5二维矩阵,我们可以使用reshape来实现

mat= vec.reshape(3,5)

print mat

显示为

[[ 0 1 2 3 4]

[ 5 6 7 8 9]

[10 11 12 13 14]]

现在如果我们返过来,知道一个二维矩阵,要变成一个一维数组,就不能用reshape了,只能用flatten. 我们来看两者的区别

a1=mat.reshape(1,-1) #-1表示为任意,让系统自动计算

print a1

a2=mat.flatten()

print a2

显示为:

a1: [[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]]

a2: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]

可以看出,用reshape进行变换,实际上变换后还是二维数组,两个方括号,因此只能用flatten.

我们要对图像求直方图,就需要先把图像矩阵进行flatten操作,使之变为一维数组,然后再进行统计。

一、画灰度图直方图

绘图都可以调用matplotlib.pyplot库来进行,其中的hist函数可以直接绘制直方图。

调用方式:

n, bins, patches = plt.hist(arr, bins=50, normed=1, facecolor='green', alpha=0.75)

hist的参数非常多,但常用的就这五个,只有第一个是必须的,后面四个可选

arr: 需要计算直方图的一维数组

bins: 直方图的柱数,可选项,默认为10

normed: 是否将得到的直方图向量归一化。默认为0

facecolor: 直方图颜色

alpha: 透明度

返回值 :

n: 直方图向量,是否归一化由参数设定

bins: 返回各个bin的区间范围

patches: 返回每个bin里面包含的数据,是一个list

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

img=np.array(Image.open('d:/pic/lena.jpg').convert('L'))

plt.figure("lena")

arr=img.flatten()

n, bins, patches = plt.hist(arr, bins=256, normed=1, facecolor='green', alpha=0.75)

plt.show()

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xNDA4NjcvMjAxNjAxLzE0MDg2Ny0yMDE2MDEwMzE2MjgyMTgwNy01NDIzNjY4NDgucG5n.jpg

二、彩色图片直方图

实际上是和灰度直方图一样的,只是分别画出三通道的直方图,然后叠加在一起。

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

src=Image.open('d:/ex.jpg')

r,g,b=src.split()

plt.figure("lena")

ar=np.array(r).flatten()

plt.hist(ar, bins=256, normed=1,facecolor='r',edgecolor='r',hold=1)

ag=np.array(g).flatten()

plt.hist(ag, bins=256, normed=1, facecolor='g',edgecolor='g',hold=1)

ab=np.array(b).flatten()

plt.hist(ab, bins=256, normed=1, facecolor='b',edgecolor='b')

plt.show()

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xNDA4NjcvMjAxNjAxLzE0MDg2Ny0yMDE2MDEwMzE3MjQyMjc3Ni0xMDE5NzcwNTUzLnBuZw==.jpg

由此可见,matplotlib的画图功能是非常强大的,直方图只是其中非常小的一部分,更多的请参看官方文档:

http://matplotlib.org/api/pyplot_summary.html

用python简单处理图片(4):图像中的像素访问

前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...

用python简单处理图片(1):打开\显示\保存图像

一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此, ...

用python简单处理图片(2):图像通道\几何变换\裁剪

一.图像通道 1.彩色图像转灰度图 from PIL import Image import matplotlib.pyplot as plt img=Image.open('d:/ex.jpg') ...

用python简单处理图片(3):添加水印

python版本:3.4 Pillow版本:3.0 一.添加文字水印 from PIL import Image, ImageDraw,ImageFont im = Image.open(" ...

Python 图像处理 OpenCV (16):图像直方图

前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

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

title: "Python实现图像直方图均衡化算法" date: 2018-06-12T17:10:48+08:00 tags: [""] categorie ...

Python+OpenCV图像处理(八)—— 图像直方图

直方图简介:图像的直方图是用来表现图像中亮度分布的直方图,给出的是图像中某个亮度或者某个范围亮度下共有几个像素.还不明白?就是统计一幅图某个亮度像素数量.比如对于灰度值12,一幅图里面有2000 个像 ...

opencv python:图像直方图 histogram

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

OpenCV Python教程(3、直方图的计算与显示)

转载请详细注明原作者及出处,谢谢! 本篇文章介绍如何用OpenCV Python来计算直方图,并简略介绍用NumPy和Matplotlib计算和绘制直方图 直方图的背景知识.用途什么的就直接略过去了. ...

随机推荐

企业IT管理员IE11升级指南【17】—— F12 开发者工具

企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

QGEditors.WinForms WinForms下使用的部分扩展控件

Nuget: https://www.nuget.org/packages/QGEditors.WinForms/ PM> Install-Package QGEditors.WinForms ...

开始学习requirejs+easyui的使用.

开始学习requirejs+easyui的使用. 目录结构: |-project |-easyui01 |-js |-main.js |-index.html |-libs libs目录下放入的是ea ...

HDOJ 1004题 Let the Balloon Rise strcmp()函数

Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...

Java 比较(==, equals, compareTo, compare)

在Java中,有 ==, equals(), compareTo(), compare() 等方法可以比较两个值或对象,比较容易混淆.画了个简单的思维导图总结一下 Java Compares 我经常记 ...

C++ opencv调用resize修改插值方式遇到的坑

opencv提供的热死则函数原型如下:void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0 ...

JAVA课程设计-教学论坛系统

团队课程设计博客 1. 团队名称:教学论坛系统设计团队 团队成员介绍: 郑佳亮(组长):201721123022,查看帖子,点赞,参与度,搜索,管理员删帖的后端,点赞,参与度前端 李于程(组员):20 ...

🍓 JRoll、React滑动删除 🍓

import React, { Component } from 'react'; import '../src/css/reset.css'; import '../src/css/delete.c ...

MySQL 组提交(group commit)

目录 前言 改进 原理 实现 参数 注意 前言 操作系统使用页面缓存来填补内存和磁盘访问的差距 对磁盘文件的写入会先写入道页面缓存中 由操作系统来决定何时将修改过的脏页刷新到磁盘 确保修改已经持久化到 ...

Singular value encountered in calculation for ROI

在ENVI中对一幅TM影像进行监督分类,在进行compute ROI separability时提示Singular value encountered in calculation for ROI, ...


推荐阅读
author-avatar
徐國煇_457
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有