为什么使用cv2.calcHist总是有错误“未设置错误就返回NULL”

时间:2019-03-20 02:59:46

标签: python opencv computer-vision

我正在将Opencv与python结合使用,并遇到一个问题。
当我运行以下代码时:

img = cv2.imread('test.jpg',0)
hist = cv2.calcHist([img],[0],None,256,[0,256])

发生错误:系统错误:<内置函数calcHist>返回NULL而未设置错误
我很困惑,无法在网络中找到相同的错误,那怎么了?
谢谢。

PS:我在Windows和Ubuntu上运行相同的代码,并得到相同的错误,所以这可能不是系统原因吗?

3 个答案:

答案 0 :(得分:0)

这个问题可以这样解决:

img = cv2.imread("picture.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray], [0], None, [256], [0, 256]) 

答案 1 :(得分:0)

错误消息确实令人困惑,但是实际错误很简单。即使您只使用1个通道,也仍然需要提供直方图大小和范围的列表。您已经针对范围进行了此操作,但并未针对大小进行此操作。 这应该起作用:

img = cv2.imread('test.jpg',0)
hist = cv2.calcHist([img],[0],None,[256],[0,256])

Wo-Ki会遇到下一个问题,因为仅绘制蓝色通道的直方图并不常见,而您可能需要强度的直方图。在这种情况下,请按照Wo-Ki的建议使用中间转换步骤。

答案 2 :(得分:0)

我有同样的问题。显然,范围[0,256]必须与img具有相同的类型。 尝试

hist = cv2.calcHist([img.astype('uint8')],[0],None,[256],[0, 256]) 

相反。应该可以。