应用程序在OpenCV的均衡化列表上崩溃

Application crashes on equalizeHist of OpenCV

本文关键字:列表 崩溃 OpenCV 应用程序      更新时间:2023-10-16

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

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:slaveWinInstallerMegaPacksrcopencvmodulesimgprocsrchistogram.cpp:2430: error: (-215) CV_ARE_SIZES_EQ(src, dst) && CV_ARE_TYPES_EQ(src, dst) && CV_MAT_TYPE(src->type) == CV_8UC1"

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

更新:

我已经解决了这个问题,将图像转换为灰度级之前均衡它。我只是不知道

  1. 该函数仅适用于灰度图像
  2. 看起来像灰度的
  3. 图像可以是非灰度的。

我想您遇到的问题是m_cvImage是一个3通道图像。因此,在调用equalizeHist之前,您需要将其转换为灰度图像。

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

另外,请查看EqualizeHist_Demo.cpp教程示例,了解如何使用它。