首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HoughLinesP和opencv内存管理

HoughLinesP和opencv内存管理
EN

Stack Overflow用户
提问于 2013-03-08 07:04:04
回答 3查看 1.5K关注 0票数 0

我目前正在研究计算机视觉,并尝试使用Hough-Transform来查找一些线条。操作本身正在工作,然而,即使是最小的样本代码也会产生释放错误。

代码语言:javascript
复制
#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示例。

异常发生在

代码语言:javascript
复制
msvcr110d.dll!_CrtIsValidHeapPointer(const void * pUserData) Line 2036  C++

我从VS2012 64位版本编译并运行此程序,可执行文件也是64位的。操作系统为Windows 7,64位

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-19 00:29:25

这两个选项中的任何一个都可以解决此问题:

  • 使用与OpenCV库版本相同的CRT链接应用程序,
  • 重新编译OpenCV并禁用静态CRT链接。

这是因为HoughLinesP在通过引用传递的“行”对象中分配内存,但在调用HoughLinesP的函数结束时,应用程序将取消分配内存。因此,对于不同的CRT,这就有问题了。

票数 1
EN

Stack Overflow用户

发布于 2013-03-08 07:15:37

您的应用程序可能正在发布模式下运行,请尝试在Debug模式下运行它。

(我之所以建议这样做,是因为它使用了调试DLL msvcr110d.dll)。

我遇到了this问题,你可能也会发现它很有用。

希望这对我有帮助,让我知道它的进展!

票数 1
EN

Stack Overflow用户

发布于 2015-07-10 22:29:34

代码语言:javascript
复制
vector<Vec4i> lines; 
line.reserve(1000); //create enough place for lines

Doodlo:

这是因为HoughLinesP在通过引用传递的“

”对象中分配内存,...

如果你预留了足够的行位置,那么就不会出现内存问题,因为函数不会只使用预留的位置来创建内存域。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15283551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档