4

Cielab 画像の 3D ヒストグラムを Python で計算したいと考えています。ヒストグラムを計算するために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ヒストグラムを計算できるかどうか教えてください

4

2 に答える 2

5

HSV 画像の 3D ヒストグラムを作成しようとしているときにこの質問に遭遇し、同じエラーが発生しました。ここで、OpenCV のドキュメントが私たちを迷わせていることがわかりました。ドキュメントは C++ API 用に書かれているため、Python API のあいまいなガイドとしてのみ使用できcv2ます (ただし、ドキュメントは C++ についても誤解を招くことがあります)。

関数のシグネチャは次のとおりです。

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

重要な点は、channelshistSizeおよびrangesパラメータは、例のようにネストされたリストではなく、フラット リストである必要があることです。i_labが 3 チャンネルの画像であると仮定して、次のことを試してください。

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 に答える