C++ OpenCV 2.4.0 C++;跟踪腐蚀堆的良好特性?

C++ OpenCV 2.4.0 C++;跟踪腐蚀堆的良好特性?,c++,opencv,heap,corruption,C++,Opencv,Heap,Corruption,我刚刚开始学习如何使用openCV库。我已经下载并安装了openCV 2.4.0,并运行了一些示例项目。在这段代码中,我试图从GoodFeatures获取输出,跟踪并绘制图像上的点。代码可以编译,但每次我运行它时,它都会崩溃,我会得到以下错误: Windows已在Corner.exe中触发断点 这可能是由于堆损坏,这表明Corner.exe或其加载的任何DLL中存在错误 这也可能是因为用户在Corner.exe具有焦点时按F12 输出窗口可能有更多诊断信息 输出窗口没有更多诊断信息。我已将错

我刚刚开始学习如何使用openCV库。我已经下载并安装了openCV 2.4.0,并运行了一些示例项目。在这段代码中,我试图从GoodFeatures获取输出,跟踪并绘制图像上的点。代码可以编译,但每次我运行它时,它都会崩溃,我会得到以下错误:


Windows已在Corner.exe中触发断点

这可能是由于堆损坏,这表明Corner.exe或其加载的任何DLL中存在错误

这也可能是因为用户在Corner.exe具有焦点时按F12

输出窗口可能有更多诊断信息


输出窗口没有更多诊断信息。我已将错误追溯到goodFeaturesToTrack函数。以下是违规代码:

// Corner.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <opencv.hpp>
#include <opencv_modules.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>

using namespace cv; //If you don't have this, you won't be able to create a mat...
using namespace std;


#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include <math.h>

//Whole bunch of #defines to make editing the code a lot easier

#define MAX_FEATURES 5
#define FILENAME "C:/Users/Mitchell/Desktop/lol.jpg"

int main(void)
{
    namedWindow("Out", CV_WINDOW_AUTOSIZE);
    namedWindow("In", CV_WINDOW_AUTOSIZE);  
    Mat Img;
    Img = cvLoadImage(FILENAME, CV_LOAD_IMAGE_GRAYSCALE);

    if(!Img.data)
    {
        fprintf(stderr, "ERROR: Couldn't open picture.");
        waitKey();
        return -1;
    }

    else
    {
        imshow("In", Img);
        waitKey();
    }

    std::vector<cv::Point2f> Img_features;
    int number_of_features = MAX_FEATURES;

    Mat Out = Mat::zeros(Img.cols, Img.rows, CV_32F);

    goodFeaturesToTrack(Img, Img_features, MAX_FEATURES, .01, .1, noArray(), 3, false);

    fprintf(stdout, "Got here...");

    /*for (int i = 0; i < MAX_FEATURES; i++)
    {
        Point2f p = Img_features[i];
        ellipse(Img, p, Size(1,1), 0, 0, 360, Scalar(255,0,0));
    }*/

    imshow("Out", Out);

    waitKey(0);
    return 0;


}
//Corner.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间cv//如果你没有这个,你将无法创建一个垫子。。。
使用名称空间std;
#包括
#包括
#包括
#包括
//大量的#定义使得编辑代码更加容易
#定义最大功能5
#定义文件名“C:/Users/Mitchell/Desktop/lol.jpg”
内部主(空)
{
namedWindow(“出”,CV\u窗口\u自动调整大小);
namedWindow(“In”,CV\u窗口\u自动调整大小);
Mat-Img;
Img=cvLoadImage(文件名、CV\u LOAD\u IMAGE\u灰度);
如果(!Img.data)
{
fprintf(stderr,“错误:无法打开图片”);
waitKey();
返回-1;
}
其他的
{
imshow(“In”,Img);
waitKey();
}
std::矢量Img_特征;
int number_of_features=最大_features;
Mat Out=Mat::零(Img.cols、Img.rows、CV_32F);
良好特性跟踪(Img、Img_特性、MAX_特性、.01、.1、noArray()、3、false);
fprintf(stdout,“到达这里…”);
/*对于(int i=0;i

这是库中的一个bug,还是我在做一些愚蠢的事情?

可能是
Img\u功能
vector在调用goodFeatures之前应该有
MAX\u功能
项?i、 e.在goodFeatures调用之前,请尝试
Img\u功能。调整大小(最大功能)

这似乎有帮助,但现在我遇到了另一个问题:当我尝试返回时,程序再次崩溃,现在显示以下消息:Corner.exe中0x779815de处的未处理异常:0xC0000005:访问冲突写入位置0x443ec000。感谢您解决了前面的问题。无论您是否调整向量大小,它都不会产生任何影响
goodFeaturesToTrack
会根据图像中找到的功能数量自动调整向量的大小。@pYr0如果使用Visual Studio,请启用异常处理(Alt+E),中断它-然后确定问题的来源。@sgar91真的吗?据我所知,OpenCV通常在函数参数中使用自己的数组类型。它可以从
std::vector
构造,但稍后它将与固定大小数组一起使用。不,代码运行正常。我认为问题可能是@pYr0没有正确地链接库。当
Release
模式库链接到
Debug
配置中时,会导致内存问题,反之亦然。如果在代码中的任何位置都没有使用
Out
,为什么最后会显示它?