4

我想在 python 中计算我的 Cielab 图像的 3D 直方图。我正在使用 openCV 来计算我的直方图。我想使用compareHistopenCV 的功能比较图像,这就是为什么我使用 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 直方图

4

2 回答 2

5

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

函数签名如下:

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

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

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

如需更完整的示例,请尝试使用opencvpython 博客中的代码清单

于 2013-04-29T15:35:26.970 回答
0

为了在 cielab 中计算直方图,这对我有用:

calcHist 的函数签名:图像、通道、掩码、bin 数量、每个维度中直方图 bin 边界的 dims 数组的数组。

img = cv2.imread(file) # in bgr 
hist = cv2.calcHist([img],[0, 1, 2],None,[256, 256, 256],[0, 255, 0, 255, 0, 255]) # in bgr
img = cv2.cvtColor(img, cv2.COLOR_BGR2LAB) # in lab 
hist = cv2.calcHist([img],[0, 1, 2],None,[100, 2*128, 2*128],[0, 100, -128, 127, -128, 127])`# in lab 

correlation = cv2.HISTCMP_CORREL # compare histograms using correlation
corr = cv2.compareHist(img, img2, correlation)
于 2020-05-31T07:31:29.873 回答