2 #include <nav_msgs/OccupancyGrid.h>
6 #include <opencv2/core/core.hpp>
7 #include <opencv2/highgui/highgui.hpp>
8 #include <opencv2/imgproc/imgproc.hpp>
17 VoronoiPathGenerator::VoronoiPathGenerator()
22 void VoronoiPathGenerator::prepareMap(
const Mat& _map, Mat& _des,
int erodeSize)
25 _map.convertTo(srcMap, CV_8UC1);
27 for(
int i = 0; i < srcMap.cols * srcMap.rows; i++)
29 if((
signed char)_map.data[i] < 0) srcMap.data[i] = 100;
34 cv::bitwise_not(srcMap, srcMap);
35 cv::threshold(srcMap, _des, 10, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
41 cv::Mat element = cv::getStructuringElement( cv::MORPH_ELLIPSE,
42 cv::Size( 2*erodeSize + 1, 2*erodeSize+1 ),
43 cv::Point( erodeSize, erodeSize ) );
45 cv::erode(_des, _des, element);
50 void VoronoiPathGenerator::computeDistanceField(
const cv::Mat& _map, cv::Mat& _distField)
52 cv::distanceTransform(_map, _distField, cv::DIST_L2, 3);
55 void VoronoiPathGenerator::computeVoronoiMap(
const cv::Mat& _distField, cv::Mat& _voronoiMap)
57 Mat srcMap = _distField;
58 srcMap.convertTo(_voronoiMap, CV_8UC1, 0.0);
61 cv::threshold(_voronoiMap, _voronoiMap, 1, 255, cv::THRESH_BINARY);