绘制梯形ROI OpenCV C ++

时间:2017-12-05 07:28:14

标签: opencv image-processing

我正在使用C ++中的OpenCV解决车道检测问题。为了选择投资回报率,我计划使用梯形形状掩模来过滤该区域。但是,我无法弄清楚如何绘制梯形。选择四个顶点后,将绘制differently shaped polygon。这是我的代码。

void select_roi(Mat &frame){
    int rows = frame.rows;
    int cols = frame.cols;

    Point points[1][4];
    points[0][0] = Point(cols*0.05, rows);
    points[0][1] = Point(cols*0.4, rows*0.4);
    points[0][2] = Point(cols*0.95, rows);
    points[0][3] =  Point(cols*0.6, rows*0.4);

    Mat img = empty_image(frame); //User defined function that returns empty image of frame dimensions
    const Point* ppt[1] = {points[0]};
    int npt[] = {4};
    fillPoly(img, ppt, npt, 1, Scalar(255,0,0), 8);
    imshow("Poly",img);
}

1 个答案:

答案 0 :(得分:1)

非常简单的错误:您的积分不正确。目前您正在绘制左下角,然后是左上角,然后是右下角,然后是右上角,然后连接回第一个。想象一下,如果你按照这些坐标对其进行追踪 - 你会得到与错误相同的形状。所以你需要做的就是订购它们,这样如果你从每个点到下一个点绘制线条,你就可以创建形状。

destination d_file {
    file ("/var/log/${name}.log");
};