VS2010 和 OpenCV:变量周围的堆栈已损坏

Posted

技术标签:

【中文标题】VS2010 和 OpenCV:变量周围的堆栈已损坏【英文标题】:VS2010 and OpenCV: Stack around a variable was corrupted 【发布时间】:2012-09-14 02:56:54 【问题描述】:

以下代码在 Visual Studio 2010 中运行时出现以下错误:Run-Time Check Failure #2 - Stack around the variable 'keypoints' was corrupted.

#include<iostream>
#include<fstream>
#include<cv.h>
#include<highgui.h>
#include<opencv2/nonfree/features2d.hpp>
using namespace std;
using namespace cv;

int main(int argc, char *argv[])

    Mat image = imread("C:/IMAGE.JPG");

    SiftFeatureDetector detector;
    vector<KeyPoint> keypoints;

    detector.detect(image, keypoints);

    return 0;

知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

这段代码:

Mat image = imread("C:/IMAGE.JPG");

可能会失败。在将 image 作为参数传递给其他函数之前,您需要确保已成功加载:

if (!image.data )

    cout <<  "Could not load image" << endl ;
    return -1;

如果imread() 失败并且该文件存在于该位置,您可能需要使用另一个斜线并将其转义:

Mat image = imread("C:\\IMAGE.JPG");

如果图片加载成功,崩溃依旧,尝试将图片加载为灰度:

Mat image = imread("C:\\IMAGE.JPG", 0);

【讨论】:

另外,请确保您有阅读C:/IMAGE.JPG的权限。 imread 成功完成(我已将/ 替换为\`) but i still have the problem. i debugged the program and the stack corruption error occurs right at the end of the program... seem like it is happening when keypoints` 向量正在清理中。【参考方案2】:

原来我需要使用 Visual Studio 2010 编译 OpenCV 库,而不仅仅是链接到预编译的 dlls 等。现在一切都很好。

【讨论】:

你是怎么想出来的?您始终可以使用 OpenCV 提供的预编译库

以上是关于VS2010 和 OpenCV:变量周围的堆栈已损坏的主要内容,如果未能解决你的问题,请参考以下文章

如何在vs2010上安装opencv

运行时检查失败 #2 - 变量“索引”周围的堆栈已损坏

OpenCV+VS2010配置

vs2012怎么配置opencv

请问如何在vs2010下配置opencv2.2,求详细步骤,万分感谢!

OpenCV2.4.9在VS2010下安装配置