在OpenCV中使用FAST功能检测器时,访问冲突读取位置0xFFFFFFFFFFFFFFFF

时间:2017-07-05 18:37:30

标签: c++ opencv

我是初学者使用opencv,并且在opencv中使用FAST功能检测器来简单地获取图像的关键点。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/features2d.hpp"

std::vector<cv::KeyPoint> kp;

int main()
{
    cv::Mat img = cv::imread("im.jpg", 0);
    cv::FAST(img, kp, 100, true);

    cv::Mat img2;
    cv::drawKeypoints(img, kp, img2 , CV_RGB(255, 0, 0));
    cv::imshow("Display", img2);
    cv::waitKey(0);
    cv::destroyWindow("Display");

    return 0;
}

但是在调试代码时(Debug模式): 我发现向量kp(作为关键点向量传递)到FAST()中的大小(kp = {size = 658812287755660302})是不可能的。但是生成表示正确关键点的图像。调试结束时会出现上述访问冲突错误消息。

在发布模式下: 代码运行正常,首先显示图像中的关键点。在图像窗口关闭时,程序崩溃。调试时,kp的大小合理(kp = {size = 427})。

当代码在调试模式下运行而没有调试时,会弹出一个应用程序错误,指出无法读取0xffffffff的内存。

调用堆栈如here所示,这对我没有任何意义。

我做错了什么?它与我初始化矢量或其他东西的方式有关吗?

1 个答案:

答案 0 :(得分:0)

我无法使用自己的图片或使用您提供的图片重现此问题。因此,我必须得出结论,您的构建环境存在问题。

  • 确保您已正确设置项目包含和库,包括默认情况下OpenCV使用的共享库。
  • 确保您使用Visual Studio 2015(或二进制兼容的VS2017)编译代码。