python - 如何使用open CV在python中计算3D直方图

标签 python opencv histogram

我想用 Python 计算我的 Cielab 图像的 3D 直方图。我正在使用 openCV 来计算直方图。我想使用 openCV 的 compareHist 函数比较图像,这就是我使用 openCV 计算图像的 3D 直方图的原因。

我尝试了以下变量:

i_lab = image.copy()
i_lab = i_lab.astype(np.uint8)
Range_hist = [[0, 100], [-100, 100], [-100, 100]]    
hist_1 = cv2.calcHist([i_lab], [[0], [1], [2]], None, [[20], [20], [20]], Range_hist)

但它给出错误 SystemError: error return without exception set 请告诉我我做错了什么以及是否可以在 python 中使用 openCV 计算 3D 直方图

最佳答案

我在尝试制作 HSV 图像的 3D 直方图时遇到了这个问题,并遇到了同样的错误。结果是 OpenCV documentation在这里把我们引入歧途。这些文档是为 C++ API 编写的,因此只能用作 Python cv2 API 的模糊指南(尽管我发现这些文档有时也会误导 C++)。

函数签名如下:

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) -> hist

关键是 channelshistSizeranges 参数应该是平面列表,而不是您示例中的嵌套列表。尝试以下操作,假设 i_lab 是三 channel 图像:

range_hist = [0, 100, -100, 100, -100, 100]
hist_1 = cv2.calcHist([i_lab], [0, 1, 2], None, [20, 20, 20], range_hist)

要获得更完整的示例,请尝试 this code listing来自 opencvpython blog .

关于python - 如何使用open CV在python中计算3D直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15834602/

相关文章:

python - 捕获异常得到 UnboundLocalError

python - 寻找不同的组合

python - TCP 连接被对等方重置且传输端点未连接

python - 使用 OpenCV python 查看原始 10 位 USB 相机

计算形状的半径

python - 从直方图曲线中选择最佳值范围

Python 多处理 : no performance gain with multiple processes

python - 从图像中提取信号曲线

python - 使用 Python 在 Plotly 中的绘图上添加通用文本标签

Python Altair 如何在不更改轴刻度的情况下对直方图数据进行分箱