免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10474 | 回复: 3
打印 上一主题 下一主题

关于显示图像直方图 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-25 12:11 |只看该作者 |倒序浏览
请问如何用matplotlib显示图像的直方图?不是自己画的,而是根据图像的像素(灰度级)直接调用显示。
或者说是:Image类实例的histogram()方法能够对直方图数据进行统计,显示的数据如何用直方图表现出来?
请指教~

论坛徽章:
0
2 [报告]
发表于 2010-05-25 20:39 |只看该作者
下面的程序用NumPy将Image转换为数组,然后调用hist()绘制直方图。
如果你已经获得了统计数据,那么可以用pl.bar(), bl.step()等直接绘制数据。

  1. import PIL.Image as Image
  2. import numpy as np
  3. import pylab as pl
  4. img = Image.open("Sunset.jpg")
  5. a = np.asarray(img)
  6. pl.hist(a[:,:,0].flatten(),bins=256, histtype="step")
  7. pl.hist(a[:,:,1].flatten(),bins=256, histtype="step")
  8. pl.hist(a[:,:,2].flatten(),bins=256, histtype="step")
  9. pl.show()
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-05-26 10:10 |只看该作者
下面的程序用NumPy将Image转换为数组,然后调用hist()绘制直方图。
如果你已经获得了统计数据,那么可以用 ...
HyryStudio 发表于 2010-05-25 20:39



    请问:a[:,:,2].flatten()这个是什么意思?最近刚看这块内容,还有bar()和step()怎么用?
        另:衡纵坐标的范围间隔怎么定?比如:0  10   20  30 ......

论坛徽章:
0
4 [报告]
发表于 2010-05-26 18:57 |只看该作者
a是一个表示图像的3维数组
a[:,:,0] 取这个图像中的某种颜色的分量,等到一个新的二维数组。
.flatten(),得到一个平坦化之后的一维数组。

hist对此一维数组进行直方图统计。

至于bar,step的用法,建议看matplotlib网站上的例子。

http://matplotlib.sourceforge.net/gallery.html

另外,建议阅读《用Python做科学计算》, http://hyry.dip.jp/pydoc/index.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP