驶桐柢 发表于 2025-12-18 08:00:05

HoughLinesP 霍夫变换 C++ opencv 内存报错处理

通常搜索到的教程调用该方法代码如下
vector plines;//保存霍夫变换检测到的直线或者vector plines;
HoughLinesP(canny, plines, 1, CV_PI / 180, 10, 0, 10);//提取边缘时,会造成有些点不连续,所以maxLineGap设大点
使用std::vector 的方式接收检测得到的直线
当函数离开作用域,开始析构临时变量时 部分机器出现堆错误:
ASSERTE(__acrt_first_block == header);
__acrt_first_block = header->_block_header_next;
}

std::allocator::deallocate(cv::Vec * const _Ptr, const unsigned __int64 _Count)
报错发生在 std::allocator::deallocate中,这是在释放 cv::Vec类型的内存时发生的堆损坏错误
初步判断时 vector 与vect4i/f 被opencv处理后产生的内存问题
解决:将vector plines; 改为指针的方式可以将内存分配到堆上,避免该问题vector* plines;最后手动释放即可
更推荐的方法:使用Mat接收检测得到的直线
Mat linesMat;
cv::HoughLinesP(dieMap, linesMat, 1, CV_PI / 180, 50, 30, 30);
for (int i = 0; i < linesMat.rows; i++) {
Vec4i line_coords = linesMat.at(i);
int x1 = line_coords;
int y1 = line_coords;
int x2 = line_coords;
int y2 = line_coords;}
随意转载和修改,无需注明地址

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

赖珊 发表于 2025-12-18 19:49:05

yyds。多谢分享

尤晓兰 发表于 2025-12-21 09:24:02

热心回复!

秦晓曼 发表于 2025-12-28 18:04:22

感谢发布原创作品,程序园因你更精彩

趣侮 发表于 2026-1-3 21:31:51

感谢分享

缄戈 发表于 2026-1-9 21:33:09

谢谢楼主提供!

能杜孱 发表于 2026-1-13 23:03:35

谢谢分享,辛苦了

呵桢 发表于 2026-1-14 07:06:14

不错,里面软件多更新就更好了

稼布欤 发表于 2026-1-15 12:03:47

过来提前占个楼

电棘缣 发表于 2026-1-15 17:30:15

热心回复!

缑莺韵 发表于 2026-1-16 21:47:22

用心讨论,共获提升!

班闵雨 发表于 2026-1-17 16:20:27

感谢,下载保存了

姚望舒 发表于 2026-1-18 08:05:53

谢谢楼主提供!

懵崭 发表于 2026-1-19 02:57:15

这个有用。

赙浦 发表于 2026-1-21 04:32:27

鼓励转贴优秀软件安全工具和文档!

寥唏 发表于 2026-1-21 15:19:01

感谢分享,学习下。

任修 发表于 2026-1-21 20:59:20

谢谢分享,辛苦了

旁拮猾 发表于 2026-1-22 01:39:04

新版吗?好像是停更了吧。

姜删懔 发表于 2026-1-22 11:25:55

过来提前占个楼

港髁 发表于 2026-1-22 19:23:22

过来提前占个楼
页: [1] 2 3
查看完整版本: HoughLinesP 霍夫变换 C++ opencv 内存报错处理