2011-12-15 2 views
2

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

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. Нужно ли мне что-то делать? FYI: Я использую двоичный OpenCV, предоставляемый его веб-сайтом.

UPDATE:

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

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

ответ

7

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

cvtColor(m_cvImage, m_cvImage, CV_BGR2GRAY); 

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

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

+0

Точно. Надеюсь, вы отправили ранее. Спасибо, в любом случае. –

+0

@Paul Я думаю, что вы обновили свой пост, когда я писал свой ответ :) – mevatron

Смежные вопросы