如何正确使用matplotlib渲染图像直方图?

时间:2015-06-09 03:47:57

标签: python opencv matplotlib

我正在尝试编写一个python小程序来获取图像的灰度直方图。我正在使用OpenCV和matplotlib但是在尝试显示图形时我没有得到好的结果。

这就是我正在做的事情:

  1. 转换为灰度。
  2. 创建256长度的零列表。
  3. 遍历每个像素,获取其灰度值,并在像素灰度值列表中的相同位置以1的值递增。
  4. 稍后,尝试使用matplotlib hist函数。但是我没有得到预期的结果。
  5. 这就是我正在尝试的:

    img = cv2.imread(sys.argv[1], 0)
    # cv2.imshow("Imagen",img)
    height, width = img.shape
    print height
    print width
    hist = [0] * 256
    print hist
    for y in xrange(height):
        for x in xrange(width):
            pixel = img[y,x]
            hist[pixel] = hist[pixel] + 1
    print hist
    print max(hist)
    pyplot.hist(hist,256, range=(0,255))
    pyplot.show()
    

    我刚刚打印了最小值和最大值,最大值为4001,这就是我所获得的。

    enter image description here

    我如何获得合适的情节?

    注意:我知道OpenCV有这个和其他实现,但在这种情况下我必须自己编写代码。

1 个答案:

答案 0 :(得分:1)

您不想pyplot.hist(hist,256, range=(0,255)),因为这是为您汇总数据,但您已经自己汇总了数据。

试试这个

pyplot.plot(hist)