// 提取路口轮廓集合(每个路口的轮廓为一系列点集)
std::vector<std::vector<cv::Point>> node_contours;
std::vector<cv::Vec4i> node_hierarchy;保存轮廓的层次关系
// 只提取外轮廓 轮廓近似方法:水平垂直对角线只保留端点
cv::findContours(node_mat, node_contours, node_hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
for (size_t i = 0; i < line_contours.size(); i++) {
// 为每个轮廓创建一个独立的图像
cv::Mat contour_mask = cv::Mat::zeros(road_line_mat.size(), CV_8UC1);
//要绘制的轮廓索引 -1表示绘制全部
cv::drawContours(contour_mask, line_contours, static_cast<int>(i), cv::Scalar(255), -1);
std::string filename = "./tmp_line_png/output_contour_" + std::to_string(i) + ".jpg";
// 将该轮廓的图像保存到文件
cv::imwrite(filename, contour_mask);
}
cv::Mat line_connect_image = cv::Mat::zeros(road_line_mat.size(), CV_8UC1);//新建一个与路线图相同大小的黑白图像
// 轮廓进行填充 在此图上绘制轮廓 所有线轮廓 当前轮廓索引 白色 填充模式 线型 层次信息
cv::drawContours(line_connect_image, line_contours, index, 255, cv::FILLED, 8, line_hierarchy);
cv::Mat contour_mask = cv::Mat::zeros(road_line_mat.size(), CV_8UC1);
cv::polylines(contour_mask, line_connect_points, false, cv::Scalar(255), 2);
std::string filename = "./tmp_line_png/output_segments_" + std::to_string(index) +".jpg";
cv::imwrite(filename, contour_mask);
使用cv::polylines函数在contour_mask图像上绘制由
line_connect_points定义的多边形线段。false参数表示多边形是否闭合,
cv::Scalar(255)表示线段的颜色(这里是白色),2表示线段的厚度为2个像素。