我用Canny边缘检测之后用的HoughLinesP,得到了很多线条,
如图:
我想要得到笔记本四条边上的线条,请问大神们这该怎么计算?
我现在的算法是这样的:
vector lines;
HoughLinesP(canny, lines, 1, CV_PI / 180, thresholdd, 30, 10);
//通过比较直线上两个点得到水平和竖直两种线条。
//x1 - x2 的绝对值 > y1 - y2 判断为水平线条,反之为垂直线条
//然后把水平和垂直线条分别放到一个数组里面,水平线条取y轴最大最小那条线
垂直线条取x轴最大最小那条线。
//这种算法导致计算不精确。 大神们帮帮我。谢谢了
// vector horizontals, verticals;
for (int i = 0; i < 20; i++) {
Vec4i v = lines[i];
double delta_x = v[0] - v[2], delta_y = v[1] - v[3];
Line l(cv::Point(v[0], v[1]), cv::Point(v[2], v[3]));
line(LinesMat, l._p1, l._p2, Scalar(255, 0, 0), 1 , CV_AA);
if (fabs(delta_x) > fabs(delta_y)) {
horizontals.push_back(l);
} else {
verticals.push_back(l);
}