我目前正在研究计算机视觉,并尝试使用Hough-Transform找到一些线条。它自己的操作正在运行,但即使是最小的示例代码也会产生释放错误。
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
int size[] = {100, 100};
Mat img(1, size, CV_8U);
img = cv::Scalar(255);
vector<Vec4i> lines;
HoughLinesP(img, lines, 1, CV_PI/180, 100, 30, 5);
cout << lines.size() << endl;
}
请注意,如果我将行转换为*行,在堆上创建向量而不删除它,则一切正常。我看不出代码有什么问题,直接来自OpenCV示例。
中发生异常
msvcr110d.dll!_CrtIsValidHeapPointer(const void * pUserData) Line 2036 C++
我从VS 2012 64bit-Version编译并运行它,可执行文件也是64位。操作系统是Windows 7,64位
答案 0 :(得分:1)
您的应用程序可能正在发布模式下运行,请尝试在Debug中运行它。
(我建议这是因为它使用调试DLL,msvcr110d.dll)。
我遇到了this个问题,您可能会觉得这个问题很有用。
希望有所帮助,让我知道它是怎么回事!
答案 1 :(得分:1)
这个问题可以通过以下两个选项之一解决:
将您的应用程序与您的OpenCV库链接到相同的CRT 版本,
重新编译OpenCV并禁用静态CRT链接。
这是因为HoughLinesP在引用传递的“lines”对象中分配内存,但在调用HoughLinesP的函数结束时,应用程序将取消分配内存。因此,对于不同的CRT,这会产生问题。
答案 2 :(得分:0)
vector<Vec4i> lines;
line.reserve(1000); //create enough place for lines
Doodlo:
这是因为HoughLinesP在&#34;行中分配内存&#34;通过引用传递的对象,...
如果您预留了足够的行,那么就不会出现内存问题,因为该函数不会仅使用保留的位置创建内存字段。