Opencv HoughLinesP 如何找到我想要的线条

我用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);
}

首先针对书本颜色做一次过滤,只保留目标颜色区域,再试试霍夫检测,如果效果还不好,可以再做一个轮廓跟踪,contour 的函数,滤除一些噪声区域后,在霍夫检测