├── test └── 1553156901232044.pcd.jpg ├── CMakeLists.txt ├── README.md └── Pcd2Bev.cpp /test/1553156901232044.pcd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangx1996/Lidar-pcd-2-jpg-of-bird-eye-view-/HEAD/test/1553156901232044.pcd.jpg -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.12) 2 | project(point) 3 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") 4 | find_package(PCL 1.8 REQUIRED) 5 | find_package(OpenCV REQUIRED) 6 | add_definitions( ${PCL_DEFINITIONS} ) 7 | include_directories( ${PCL_INCLUDE_DIRS} ) 8 | 9 | add_executable(Pcd2Bev Pcd2Bev.cpp) 10 | target_link_libraries(Pcd2Bev ${PCL_LIBRARIES} ${OpenCV_LIBS}) 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lidar-pcd-2-jpg-of-bird-eye-view- 2 | Take bird-eye-view Jpg file from pcd file. 3 | 4 | 5 | 创建build文件夹 6 | 7 | mkdir build 8 | cd build 9 | 10 | 编译 11 | 12 | cmake 13 | make 14 | 15 | 运行 16 | 17 | ./Pcd2Bev your file location 18 | 19 | 20 | 结果 21 | 22 | ![image](https://github.com/WAN96/Lidar-pcd-2-jpg-of-bird-eye-view-/blob/master/test/1553156901232044.pcd.jpg) 23 | -------------------------------------------------------------------------------- /Pcd2Bev.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | 14 | using namespace std; 15 | 16 | 17 | int w_range[2] = {-20,20};//左右范围 18 | int fv_range[2] = {-20,20};//前后范围 19 | float height_range[2] = {-1,3};//高度范围 20 | float resolution = 0.05;//分辨率 21 | 22 | static int64_t gtm() { 23 | struct timeval tm; 24 | gettimeofday(&tm, 0); 25 | // return ms 26 | int64_t re = (((int64_t)tm.tv_sec) * 1000 * 1000 + tm.tv_usec); 27 | return re; 28 | } 29 | 30 | int main(int argc, char** argv) 31 | { 32 | int64_t tm0 = gtm(); 33 | pcl::PointCloud::Ptr cloud(new pcl::PointCloud);//初始化点云 34 | 35 | pcl::io::loadPCDFile(argv[1], *cloud);//加载pcd点云并放入cloud中 36 | 37 | cout<<"点云数量:"<points.size()<points.size(); 40 | 41 | vector x,y; 42 | vector z; 43 | 44 | float dx = w_range[1]/resolution; 45 | float dy = fv_range[1]/resolution; 46 | 47 | float ix,iy; 48 | 49 | for (size_t i = 0; i < len; i++) 50 | { 51 | if(cloud->points[i].y>fv_range[0] && cloud->points[i].ypoints[i].x>w_range[0] && cloud->points[i].xpoints[i].z>height_range[0] && cloud->points[i].zpoints[i].x/resolution; 59 | float yr= cloud->points[i].y/resolution; 60 | 61 | //坐标转换 62 | ix = (dx + int(xr)); 63 | iy = (dy - int(yr)); 64 | 65 | x.push_back(round(ix)); 66 | y.push_back(round(iy)); 67 | z.push_back(cloud->points[i].z); 68 | } 69 | } 70 | } 71 | 72 | } 73 | 74 | float xmax = *max_element(x.begin(),x.end()); 75 | float xmin = *min_element(x.begin(),x.end()); 76 | 77 | cout<<"x坐标最大值:"< gray;//灰度值 100 | 101 | for (int j=0; j(y[i], x[i]) = cv::Vec3b(gray[i],gray[i],gray[i]); 109 | } 110 | 111 | int64_t tm1 = gtm(); 112 | cout<<"耗时(s):"<