使用matplotlib绘制图像颜色直方图

使用matplotlib绘制图像颜色直方图,第1张

使用matplotlib绘制图像颜色直方图

尝试了您的更新代码,但工作正常。这正是我正在尝试的:

import PILfrom PIL import Imagefrom matplotlib import pyplot as pltim = Image.open('./color_gradient.png')  w, h = im.size  colors = im.getcolors(w*h)def hexenpre(rgb):    r=rgb[0]    g=rgb[1]    b=rgb[2]    return '#%02x%02x%02x' % (r,g,b)for idx, c in enumerate(colors):    plt.bar(idx, c[0], color=hexenpre(c[1]))plt.show()

更新:

我认为matplotlib试图在每个小节周围放置黑色边框。如果条形太多,则条形太细而无法显示颜色。如果您拥有工具栏,则可以放大该图并看到这些条确实具有颜色。因此,如果通过以下方式设置边缘颜色:

for idx, c in enumerate(colors):     plt.bar(idx, c[0], color=hexenpre(c[1]),edgecolor=hexenpre(c[1]))

有用!

要处理的图像:

结果:

分析
按tottime排序:

    ncalls  tottime  percall  cumtime  percall filename:lineno(function)        1   23.424   23.424   24.672   24.672 {built-in method mainloop}   460645    8.626    0.000    8.626    0.000 {numpy.core.multiarray.array}    22941    7.909    0.000   18.447    0.001 C:Python27libsite-packagesmatplotlibartist.py:805(get_aliases)  6814123    3.900    0.000    3.900    0.000 {method 'startswith' of 'str' objects}    22941    2.244    0.000    2.244    0.000 {dir}   276714    2.140    0.000    2.140    0.000 C:Python27libweakref.py:243(__init__)  4336835    2.029    0.000    2.029    0.000 {getattr}  1927044    1.962    0.000    3.027    0.000 C:Python27libsite-packagesmatplotlibartist.py:886(is_alias)   114811    1.852    0.000    3.883    0.000 C:Python27libsite-packagesmatplotlibcolors.py:317(to_rgba)    69559    1.653    0.000    2.841    0.000 C:Python27libsite-packagesmatplotlibpath.py:86(__init__)    68869    1.425    0.000   11.700    0.000 C:Python27libsite-packagesmatplotlibpatches.py:533(_update_patch_transform)   161205    1.316    0.000    1.618    0.000 C:Python27libsite-packagesmatplotlibcbook.py:381(is_string_like)        1    1.232    1.232    1.232    1.232 {gc.collect}   344698    1.116    0.000    1.513    0.000 C:Python27libsite-packagesmatplotlibcbook.py:372(iterable)    22947    1.111    0.000    3.768    0.000 {built-in method draw_path}   276692    1.024    0.000    3.164    0.000 C:Python27libsite-packagesmatplotlibtransforms.py:80(__init__)        2    1.021    0.510    1.801    0.900 C:Python27libsite-packagesmatplotlibcolors.py:355(to_rgba_array)    22947    0.818    0.000   14.677    0.001 C:Python27libsite-packagesmatplotlibpatches.py:371(draw)183546/183539    0.793    0.000    2.030    0.000 C:Python27libsite-packagesmatplotlibunits.py:117(get_converter)   138006    0.756    0.000    1.267    0.000 C:Python27libsite-packagesmatplotlibtransforms.py:126(set_children)

按累积时间排序

ncalls  tottime  percall  cumtime  percall filename:lineno(function)        1    0.001    0.001   84.923   84.923 C:Python27test.py:23(imageProcess)        1    0.013    0.013   44.079   44.079 C:Python27libsite-packagesmatplotlibpyplot.py:2080(bar)        1    0.286    0.286   43.825   43.825 C:Python27libsite-packagesmatplotlibaxes.py:4556(bar)        1    0.000    0.000   40.533   40.533 C:Python27libsite-packagesmatplotlibpyplot.py:123(show)        1    0.000    0.000   40.533   40.533 C:Python27libsite-packagesmatplotlibbackend_bases.py:69(__call__)    22943    0.171    0.000   24.964    0.001 C:Python27libsite-packagesmatplotlibpatches.py:508(__init__)        1    0.000    0.000   24.672   24.672 C:Python27libsite-packagesmatplotlibbackendsbackend_tkagg.py:68(mainloop)        1    0.000    0.000   24.672   24.672 C:Python27liblib-tkTkinter.py:323(mainloop)        1   23.424   23.424   24.672   24.672 {built-in method mainloop}    22947    0.499    0.000   24.654    0.001 C:Python27libsite-packagesmatplotlibpatches.py:55(__init__)    22941    0.492    0.000   20.180    0.001 C:Python27libsite-packagesmatplotlibartist.py:1136(setp)    22941    0.135    0.000   18.730    0.001 C:Python27libsite-packagesmatplotlibartist.py:788(__init__)    22941    7.909    0.000   18.447    0.001 C:Python27libsite-packagesmatplotlibartist.py:805(get_aliases)    72/65    0.071    0.001   17.118    0.263 {built-in method call}    24/12    0.000    0.000   17.095    1.425 C:Python27liblib-tkTkinter.py:1405(__call__)    22941    0.188    0.000   16.647    0.001 C:Python27libsite-packagesmatplotlibaxes.py:1476(add_patch)        1    0.000    0.000   15.861   15.861 C:Python27libsite-packagesmatplotlibbackendsbackend_tkagg.py:429(show)        1    0.000    0.000   15.861   15.861 C:Python27liblib-tkTkinter.py:909(update)        1    0.000    0.000   15.846   15.846 C:Python27libsite-packagesmatplotlibbackendsbackend_tkagg.py:219(resize)        1    0.000    0.000   15.503   15.503 C:Python27libsite-packagesmatplotlibbackendsbackend_tkagg.py:238(draw)

似乎所有时间都花在matplotlib中。如果要加快速度,可以找到其他绘图工具或减少“条”的数量。尝试自己在画布上使用矩形来做。

定时:

  1. 上面发布的代码:75s
  2. 为每一个画一条线,即plt.plot([n,n],[0,count]等。):95s


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5640186.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存