为什么使用 cv2.calcHist 总是有一个错误“返回 NULL 而不设置错误”

dig*_*ger 5 python opencv computer-vision

我在 python 中使用 Opencv,遇到了一个问题。
当我运行以下代码时:

img = cv2.imread('test.jpg',0)
hist = cv2.calcHist([img],[0],None,256,[0,256])
Run Code Online (Sandbox Code Playgroud)

发生错误:SystemError: <built-in function calcHist> returned NULL without setting an error
我很困惑,在网络中找不到相同的错误,所以出了什么问题?
谢谢。

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

小智 6

错误消息确实令人困惑,但实际错误很简单。即使您只使用 1 个通道,您仍然需要提供直方图大小和范围的列表。您已经为范围做到了这一点,但没有为大小做到这一点。这应该有效:

img = cv2.imread('test.jpg',0)
hist = cv2.calcHist([img],[0],None,[256],[0,256])
Run Code Online (Sandbox Code Playgroud)

Wo-Ki 预计您的下一个问题,因为只制作蓝色通道的直方图是不寻常的,而您可能想要一个强度直方图。在这种情况下,请使用 Wo-Ki 建议的中间转换步骤。


小智 0

这个问题可以这样解决:

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