Приложение вылетает на equizeHist из OpenCV - PullRequest
2 голосов
/ 15 декабря 2011

Мое приложение MFC запускает различные API из OpenCV2.Все остальное работает нормально.Но когда моя программа запускает

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

, я получаю следующее исключение времени выполнения.

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"

Согласно отладчику, исключение было выброшено в середине обработки (около 40%) изображения вequalizeHist.Есть ли что-нибудь, что мне нужно сделать?К вашему сведению: я использую двоичный файл OpenCV, предоставленный его веб-сайтом.

ОБНОВЛЕНИЕ:

Я решил эту проблему, преобразовав изображения в уровень серого перед выравниванием.Я просто не знал,

  1. функция работает только с изображениями уровня серого
  2. изображения, которые выглядят как уровни серого, могут быть не серыми.

1 Ответ

7 голосов
/ 15 декабря 2011

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что m_cvImage - это 3-канальное изображение.Итак, вам нужно преобразовать его в изображение в градациях серого, прежде чем вы сможете вызвать equalizeHist.

cvtColor(m_cvImage, m_cvImage, CV_BGR2GRAY);

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

. Также посмотрите учебный пример EqualizeHist_Demo.cpp , чтобы увидеть, как ониспользуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...