opencv HoughLinesP 触发断点,200分求解
写了个视频直线检测的程序,用定时器回调函数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);
}
......
}
}
}