For 循环结束自身并终止 运行 程序但在删除斜率计算语句时正确运行
For loop ends itself and terminates the running program but runs correctly when the slope calculation statement is removed
我正在使用 opencv 的概率霍夫线函数扫描图像的候选 ROI 以寻找线条,然后计算每条检测到的线条的斜率。如果否,则内部 For 循环自行结束并终止 运行 程序。为每个 ROI 检测到的线数大于 5,但在删除斜率计算语句后运行正确。我正在使用 eclipse Luna 4.4.0。 Mat ini[]用于存储每个候选ROI
for (int m = 0; m < cnt; m++)
{
if (selected[m] == true)
{
vector<Vec4i> lines;
vector<Vec4i> v_lines;
vector<Vec4i> h_lines;
int vl_cnt = 0;
int hl_cnt = 0;
// lines are detected in rectangle number m
HoughLinesP(ini[m], lines, 1, CV_PI / 180, 40,
(ini[m].cols) / 3, (ini[m].cols) / 5);
float slope = 0;
for (size_t i = 0; i < lines.size(); i++ )
{
cout << "0";
Vec4i p = lines[i];
cout << "1";
slope = ((p[3] - p[1]) / (p[2] - p[0])); // removing this statement fixes the unexpected termination
cout << slope;
}
}
}
当 p[2] - p[0] == 0
时,您似乎遇到了 除以零 错误。简单地用类似的东西来防止它:
float run = p[2] - p[0];
if (run != 0) {
slope = ((p[3] - p[1]) / run);
} else {
// handle no run
}
我正在使用 opencv 的概率霍夫线函数扫描图像的候选 ROI 以寻找线条,然后计算每条检测到的线条的斜率。如果否,则内部 For 循环自行结束并终止 运行 程序。为每个 ROI 检测到的线数大于 5,但在删除斜率计算语句后运行正确。我正在使用 eclipse Luna 4.4.0。 Mat ini[]用于存储每个候选ROI
for (int m = 0; m < cnt; m++)
{
if (selected[m] == true)
{
vector<Vec4i> lines;
vector<Vec4i> v_lines;
vector<Vec4i> h_lines;
int vl_cnt = 0;
int hl_cnt = 0;
// lines are detected in rectangle number m
HoughLinesP(ini[m], lines, 1, CV_PI / 180, 40,
(ini[m].cols) / 3, (ini[m].cols) / 5);
float slope = 0;
for (size_t i = 0; i < lines.size(); i++ )
{
cout << "0";
Vec4i p = lines[i];
cout << "1";
slope = ((p[3] - p[1]) / (p[2] - p[0])); // removing this statement fixes the unexpected termination
cout << slope;
}
}
}
当 p[2] - p[0] == 0
时,您似乎遇到了 除以零 错误。简单地用类似的东西来防止它:
float run = p[2] - p[0];
if (run != 0) {
slope = ((p[3] - p[1]) / run);
} else {
// handle no run
}