如何计算图像的直方图?

时间:2018-03-31 16:36:03

标签: python-2.7 opencv opencv3.1

如何解决以下错误?

   import cv2

   img= cv2.imread('/home/monojit/Desktop/crop.jpg')
   hsv= cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

   hist= cv2.calcHist([hsv],[0,1],None,[256],[0,256])
   print(hist)

   cv2.imshow('img',hsv)
   cv2.waitKey(0)
   cv2.destroyAllWindows()

但在执行时会收到以下错误:

Traceback (most recent call last):
File "/home/monojit/Desktop/hisCalc.py", line 6, in <module>
hist= cv2.calcHist([hsv],[0,1],None,[256],[0,256])
error: OpenCV(3.4.1) /home/monojit/Desktop/OpenCV/modules/imgproc/src/histogram.cpp:1782: error: (-215) csz == 0 || csz == dims in function calcHist

如何解决错误?

1 个答案:

答案 0 :(得分:1)

问题在于:

hist= cv2.calcHist([hsv],[0,1],None,[256],[0,256])

问题的真正答案取决于你想要什么。

第二个参数是一个频道号。因此,如果您想要一个通道的1d直方图(例如,Hue),则应将其更改为

hist= cv2.calcHist([hsv],[0],None,[256],[0,256])

第四和第五个参数是每个通道的区间数和范围。如果你想获得Hue和Saturation通道的2d直方图,你应该将它改为

hist = cv2.calcHist([hsv], [0, 1], None, [256, 256], [0, 256, 0, 256])