应用程序在OpenCV的equalizeHist上崩溃

Tae*_*hin 2 c++ mfc opencv

我的MFC应用程序从OpenCV2运行各种API.其他一切都很好.但是当我的程序运行时

cv::Mat result;
cv::equalizeHist(m_cvImage,result);
Run Code Online (Sandbox Code Playgroud)

我得到了关注运行时异常.

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"
Run Code Online (Sandbox Code Playgroud)

根据调试器,在equalizeHist中处理(大约40%)图像的过程中抛出了异常.有什么我需要做的吗?仅供参考:我正在使用其网站提供的二进制OpenCV.

更新:

我已经通过在均衡之前将图像转换为灰度来解决了这个问题.我只是不知道

  1. 该功能仅适用于灰度图像
  2. 看起来像灰度级的图像可以是非灰色的.

mev*_*ron 7

我想你遇到的问题m_cvImage是3通道图像.因此,您需要先将其转换为灰度图像,然后才能调用equalizeHist.

cvtColor(m_cvImage, m_cvImage, CV_BGR2GRAY);

cv::Mat result;
cv::equalizeHist(m_cvImage, result);
Run Code Online (Sandbox Code Playgroud)

另外,查看EqualizeHist_Demo.cpp教程示例以了解它的使用方法.