我正在使用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);
}
答案 0 :(得分:1)
非常简单的错误:您的积分不正确。目前您正在绘制左下角,然后是左上角,然后是右下角,然后是右上角,然后连接回第一个。想象一下,如果你按照这些坐标对其进行追踪 - 你会得到与错误相同的形状。所以你需要做的就是订购它们,这样如果你从每个点到下一个点绘制线条,你就可以创建形状。
destination d_file {
file ("/var/log/${name}.log");
};