2014-05-14 77 views
3

后使用的OpenCV(2.49二进制文件),调试运行报告在这短短的代码中使用cv::minMaxIdx时堆栈损坏:OpenCV的:用MSVC 2013堆栈损坏minMaxIdx

cv::MatND hist; 
    int histSize[] = { 256 }; 
    float range[] = { 0, 256 }; 
    const float* histRange[] = { range }; 

    cv::calcHist(&image, 1, { 0 }, cv::Mat(), hist, 1, histSize, histRange, true /* uniform */, true /* accumulate */); 
    // this line provokes a stack corruption 
    cv::minMaxIdx(hist, nullptr, nullptr, nullptr, &maxIdx); 

我可以看到在调试器中的直方图,所有的值和变量看起来都正确。问题在发布模式中不会发生,但我怀疑这只是因为检查没有运行。将hist更改为hist.col(0)也没有帮助。

+0

如何声明'maxIdx'? – Mikhail

回答

5

从OpenCV的documentation

minIdx不是NULL,它必须有至少2个元素(如 以及maxIdx),即使src为单排或单列的矩阵。

+0

非常感谢!完全没有看到:/ –

+0

@ma_il哇,盲目猜测工作!很高兴这有助于:) – Mikhail