gpt4 book ai didi

OpenCV OutputArray 堆损坏?

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:22 24 4
gpt4 key购买 nike

我正在编写一个使用 OpenCV 2.4.3 进行一些图像处理的函数,我使用 InputArray 和 OutputArray 作为参数类型。在使用 Visual Studio 2008 Express 的调试构建中,下面的代码(最小测试用例)在 for(;;) 循环的第一次迭代后给我这个非常奇怪的错误:

“HEAP[Test.exe]:0032F598 处的堆 block 已在 0032F5D0 处修改,超过请求的大小 30 Windows 已在 Test.exe 中触发断点。这可能是由于堆损坏造成的,这表明 Test.exe 或它加载的任何 DLL 中存在错误。这也可能是由于用户在 Test.exe 具有焦点时按了 F12。”

struct Corner
{
float x;
float y;
float response;
};


void my_CornerDetector(InputArray _image, OutputArray _corners)
{
vector<Corner> corners;
Corner c;
c.x = 150; c.y = 200; c.response = 0.1485;
corners.push_back(c);
corners.push_back(c);
corners.push_back(c);
Mat(corners).copyTo(_corners);
}

void main()
{
Mat frame, frame_gray;
namedWindow("Output", CV_WINDOW_AUTOSIZE );

VideoCapture capture;
capture.open(0);
for (;;)
{
capture >> frame;
if (frame.empty())
break;

cvtColor( frame, frame_gray, CV_BGR2GRAY );

vector<Corner> corners;
my_CornerDetector( frame_gray, corners);

for( int i = 0; i < corners.size(); i++ )
circle( frame, Point2f(corners[i].x, corners[i].y), 4, CV_RGB(255,0,0), -1, 8, 0 );

imshow("Output", frame);

char key = (char)waitKey(2);
switch (key)
{
case 27:
case 'q':
return;
break;
}
}
}

请注意,在第一次迭代期间和崩溃之前,角点在 for 循环中具有正确的值(相同角点的 3 倍)。如果我使用 Point2f(并且我忘记了响应字段)而不是将我的 Corner 类型用于 std::vector,则该示例按预期工作。如果我使用 std::vector &_corners 而不是使用 OutputArray,它也可以正常工作。这是怎么回事??我觉得也许我需要在某个地方注册我的类型角,以便它可以与 OutputArray 一起使用,但我在 OpenCV 文档中没有看到这样的事情。

顺便说一句,我没有按 F12 ;-)

最佳答案

问题在于传递 Vector 角。它不会转换为 OutputArray。

替换 block :

vector<Corner> corners;
my_CornerDetector( frame_gray, corners);
for( int i = 0; i < corners.size(); i++ )
circle(frame, Point2f(corners[i].x, corners[i].y), 4, CV_RGB(255,0,0), -1, 8, 0 );

与:

Mat corners;
my_CornerDetector( frame_gray, corners);
for( int i = 0; i < corners.rows; i++ )
{
Corner c = corners.at<Corner>(i, 0);
circle(frame, Point2f(c.x, c.y), 4, CV_RGB(255,0,0), -1, 8, 0 );
}

关于OpenCV OutputArray 堆损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com