opencv HoughLinesP 触发断点,200分求解

redfires 2017-12-02 11:02:04
写了个视频直线检测的程序,用定时器回调函数OnTimer处理视频,用的是VS2010和opencv249,在XP上能顺利运行。
后来把程序转到WIN7 64位上运行,一运行就自动退出。
就一条条调试,发现问题出在HoughLinesP ,只要程序中有HoughLinesP ,一运行就自动退出,单步调试发现,当一帧处理完,下一次处理时,总是报触发一个断点,没有HoughLinesP ,就运行正常。
不知道怎么解决,困扰很久了,高分求解。

程序如下:
void CMoveTargetDetectDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

if(3==nIDEvent)//GMM的定时函数
{
//Mat mask,backgroundImage;
video>>m_frame;

width=m_frame.rows;
height=m_frame.cols;
numframe++;

if (m_frame.empty())
{
ClearWindow();
SavedAllResult=false;
KillTimer(3);
return;
}
else
{
Mat CannyImg;

Canny(m_frame, CannyImg, 140, 250, 3);

Mat DstImg;

cvtColor(CannyImg, DstImg, CV_GRAY2BGR);

vector<Vec4i> Lines;

HoughLinesP(CannyImg, Lines, 1, CV_PI / 360, 170,50,55);

int len=Lines.size();

long *length=(long *)malloc(len*sizeof(long));
double* angle=(double*)malloc(len*sizeof(double));

for (size_t i = 0; i <len; i++)
{
//line(DstImg, Point(Lines[i][0], Lines[i][1]), Point(Lines[i][2], Lines[i][3]), Scalar(0, 0, 255), 2, 8);
length[i]=sqrt(double((Lines[i][0]-Lines[i][2])*(Lines[i][0]-Lines[i][2]))+double((Lines[i][1]-Lines[i][3])*(Lines[i][1]-Lines[i][3])));
//angle[i]=(Lines[i][1]-Lines[i][3])/(Lines[i][0]-Lines[i][2]+0.000001)*180/3.1415926 ;
angle[i]=(Lines[i][1]-Lines[i][3])/(Lines[i][0]-Lines[i][2]+0.000001);

}
......
}
}
}

...全文
473 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang_jl2019 2019-11-19
  • 打赏
  • 举报
回复
我也遇见opencv HoughLinesP在视频中调用一直出现问题:debug assertion failed
csulizhang 2017-12-02
  • 打赏
  • 举报
回复
HoughLinesP带了个P,输入图像应该是8位单通道二进制图像,也就是灰度图,所以blablabla
redfires 2017-12-02
  • 打赏
  • 举报
回复
补充: 单帧处理没有问题。但一帧处理完毕,通过回调函数转下一帧处理就报“触发断点”错误。
redfires 2017-12-02
  • 打赏
  • 举报
回复
@Zhangli100, 就是输入的Canny处理后的二值图像。 补充: 采用for 循环实现对视频的处理也报错

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧