我正在将Opencv与python结合使用,并遇到一个问题。
当我运行以下代码时:
img = cv2.imread('test.jpg',0)
hist = cv2.calcHist([img],[0],None,256,[0,256])
发生错误:系统错误:<内置函数calcHist>返回NULL而未设置错误
我很困惑,无法在网络中找到相同的错误,那怎么了?
谢谢。
PS:我在Windows和Ubuntu上运行相同的代码,并得到相同的错误,所以这可能不是系统原因吗?
答案 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])
相反。应该可以。