Python : comment corriger l'erreur OpenCV !_src.empty() dans la méthode cvtColor ?

OpenCV est une librairie développée dans le langage Python. Elle permet d'effectuer du traitement sur des images en temps réel. En plus des images, on peut également traiter des vidéos et utiliser des algorithmes d'apprentissage ou encore effectuer des calculs matriciels. Le message d'erreur "!_src.empty()" affiché lors de certaines fonctions est en fait lié au chargement de l'image.

Lorsque vous manipulez une image et que vous obtenez ce message d'erreur, cela vient du fait qu'OpenCV n'a pas pu charger correctement l'image depuis la source que vous lui avez indiquée.

>>> frame = cv2.imread('mauvaisChemin/image.png')
>>> frame_HSV= cv2.cvtColor(frame,cv2.COLOR_RGB2HSV)
cv2.error: OpenCV(3.4.3) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

La première chose à faire est de bien vérifier la présence de l'image en question sur votre ordinateur. Vous devez contrôler que le chemin vers l'image est correctement écrit et que l'extension indiquée est bien celle de l'image.

Il existe également des cas particuliers pouvant causer cette erreur. Si vous souhaitez prendre une photo en utilisant votre webcam, le message d'erreur peut se produire si un autre logiciel utilise votre webcam. Un seul logiciel à la fois peut utiliser la webcam. Vous devez donc désactiver les autres logiciels pouvant s'en servir. Assurez-vous également par mesure de précaution que les drivers de la webcam sont bien à jour.

Une autre cause d'erreur est le chemin de l'image sous Windows. En effet, Windows utilise l'antislash comme séparateur de dossier. Or ce caractère sert également en Python pour certains caractères spéciaux. Pour éviter ce souci, vous pouvez soit doubler les antislashs, soit précéder la chaîne de caractères de la lettre "r". Python traitera alors les antislashs de la même manière que les autres caractères.

# Cette instruction donnera une erreur, car "\n" correspond à un retour à la ligne
frame = cv2.imread('C:\images\nouvelleImage.png')
#  la place, utiliser l'une de ces 2 écritures
frame = cv2.imread('C:\\images\\nouvelleImage.png')
frame = cv2.imread(r'C:\images\nouvelleImage.png')

Python