花莲县网站建设_网站建设公司_前端工程师_seo优化
2025/12/17 19:55:58 网站建设 项目流程

通常搜索到的教程调用该方法代码如下
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<cv::Vec<int,4>>::deallocate(cv::Vec<int,4> * const _Ptr, const unsigned __int64 _Count)

报错发生在 std::allocator<cv::Vec<int,4>>::deallocate中,这是在释放 cv::Vec<int,4>类型的内存时发生的堆损坏错误

初步判断时 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);

/* by 01130.hk - online tools website : 01130.hk/zh/uuid.html */ int x1 = line_coords[0]; int y1 = line_coords[1]; int x2 = line_coords[2]; int y2 = line_coords[3];

}

随意转载和修改,无需注明地址

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询