3
votes

pourquoi l'utilisation de cv2.calcHist a toujours une erreur "renvoyé NULL sans définir d'erreur"

J'utilise Opencv avec python et je rencontre une question.
Lorsque j'exécute le code suivant:

img = cv2.imread('test.jpg',0)
hist = cv2.calcHist([img],[0],None,256,[0,256])

Une erreur se produit: SystemError: a renvoyé NULL sans définir d'erreur
Je suis confus et je ne trouve pas la même erreur dans les réseaux, alors qu'est-ce qui ne va pas?
Merci.

PS: J'exécute le même code sous Windows et Ubuntu, et j'obtiens la même erreur, donc ce n'est peut-être pas la raison du système?


1 commentaires

Comme conseil général sur NULL, vérifiez toujours si votre image est vide.


3 Réponses :


0
votes

cette question peut être résolue comme ceci:

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


0 commentaires

4
votes

Le message d'erreur est vraiment déroutant, mais l'erreur réelle est simple. Même si vous n'utilisez qu'un seul canal, vous devez toujours fournir une liste de tailles et de plages d'histogramme. Vous l'avez fait pour la gamme, mais pas pour la taille. Cela devrait fonctionner:

img = cv2.imread('test.jpg',0)
hist = cv2.calcHist([img],[0],None,[256],[0,256])

Wo-Ki anticipe votre prochain problème, car il est inhabituel de créer un histogramme du canal bleu uniquement, et vous voulez probablement un histogramme de l'intensité à la place. Dans ce cas, utilisez l'étape de conversion intermédiaire comme le suggère Wo-Ki.


0 commentaires

0
votes

J'ai eu le même problème. Apparemment, les plages [0, 256] doivent être du même type que img. Essayez plutôt

hist = cv2.calcHist([img.astype('uint8')],[0],None,[256],[0, 256]) 

. Cela devrait fonctionner correctement.


0 commentaires