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);
}
......
}
}
}
后来把程序转到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);
}
......
}
}
}
...全文
相关推荐
Opencv2.4.9函数HoughLinesP分析
Opencv2.4.9中的HoughLinesP函数是一种概率霍夫变换(Probabilistic Hough Transform)的应用,用于在图像中检测直线,特别是处理大量边缘点时能有效降低运算量
OpenCV 3.0 实现锦鲤图像质量分级与价值评估
图像质量评估是机器视觉在农业与水产业落地的关键基础能力,其核心在于将人眼可感知的纹理、边缘、色彩等物理特征转化为可量化、可复现的数字指纹。基于DCT中频分析与HOG方向梯度的双模态特征提取,结合L*a*b空间光照归一化和ROI标准化预处理,构建出轻量、可解释、无需GPU的本地化评估pipeline。该方法规避了深度学习黑箱缺陷,突出OpenCV 3.0在资源受限场景下的工程鲁棒性,适用于养殖质检、电商品控、水族馆入库等对实时性、可调试性与部署成本敏感的实际场景,尤其适配中小型生产单元的边缘端视觉升级需求。
C++OpenCV3源代码HoughLinesP函数用法
### C++ OpenCV3 源代码 HoughLinesP 函数用法详解#### 一、引言在计算机视觉领域,边缘检测是一项基础而重要的技术。
python+opencv实现霍夫变换检测直线
可以通过 pip 命令安装 OpenCV:`pip install opencv-python`。- 准备测试图像:选择一张包含直线的图像作为测试对象。
opencv求解区域的内接矩形
OpenCV中的内接矩形求解OpenCV提供了多种方法来求解内接矩形,包括基于最小外接矩形的方法、基于中心扩散法的方法等。在本文中,我们将介绍基于中心扩散法的方法,该方法可以快速准确地求解内接矩形。


图形处理/算法
