2011-12-15 3 views
2

Mon application MFC exécute diverses API à partir d'OpenCV2. Tout le reste fonctionne bien. Mais quand mon programme s'exécuteL'application tombe en panne sur equalizeHist d'OpenCV

cv::Mat result; 
cv::equalizeHist(m_cvImage,result); 

Je reçois l'exception d'exécution suivante.

Unhandled exception at 0x7727fbae in OpenCVTest.exe: Microsoft C++ exception: cv::Exception at memory location 0x0029e944.. 

"C:\slave\WinInstallerMegaPack\src\opencv\modules\imgproc\src\histogram.cpp:2430: error: (-215) CV_ARE_SIZES_EQ(src, dst) && CV_ARE_TYPES_EQ(src, dst) && CV_MAT_TYPE(src->type) == CV_8UC1" 

Selon débogueur, l'exception a été levée dans le milieu de traitement (environ 40%) dans l'image equalizeHist. Y a-t-il quelque chose que je dois faire? FYI: J'utilise OpenCV binaire fourni par son site web.

MISE À JOUR:

J'ai résolu ce problème en convertissant les images à niveaux de gris avant l'égalisation il. Je ne savais pas

  1. la fonction fonctionne uniquement avec une image de niveau de gris
  2. images qui ressemblent à des niveaux de gris peut être non-gris.

Répondre

7

J'imagine que le problème que vous rencontrez est que m_cvImage est une image à 3 canaux. Vous devez donc le convertir en une image en niveaux de gris avant de pouvoir appeler le equalizeHist.

cvtColor(m_cvImage, m_cvImage, CV_BGR2GRAY); 

cv::Mat result; 
cv::equalizeHist(m_cvImage, result); 

En outre, un coup d'oeil à l'exemple de tutoriel EqualizeHist_Demo.cpp pour voir comment il est utilisé.

+0

Exactement. J'espère que vous avez posté plus tôt. Merci quand même. –

+0

@Paul Je pense que vous aviez mis à jour votre message pendant que j'écrivais ma réponse :) – mevatron

Questions connexes