Point Cloud Library (PCL) 1.12.0
Loading...
Searching...
No Matches
png_io.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2010-2011, Willow Garage, Inc.
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials provided
18 * with the distribution.
19 * * Neither the name of the copyright holder(s) nor the names of its
20 * contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 *
36 * $Id$
37 * Authors: Anatoly Baksheev
38 */
39
40#pragma once
41
42#include <pcl/pcl_macros.h>
43#include <pcl/point_cloud.h>
44#include <pcl/console/print.h>
45#include <string>
46#include <pcl/io/point_cloud_image_extractors.h>
47
48namespace pcl
49{
50 namespace io
51 {
52 /** \brief Saves 8-bit encoded image to PNG file.
53 * \param[in] file_name the name of the file to write to disk
54 * \param[in] mono_image image grayscale data
55 * \param[in] width image width
56 * \param[in] height image height
57 * \param[in] channels number of channels
58 * \ingroup io
59 */
60 PCL_EXPORTS void
61 saveCharPNGFile (const std::string& file_name, const unsigned char *mono_image, int width, int height, int channels);
62
63 /** \brief Saves 16-bit encoded image to PNG file.
64 * \param[in] file_name the name of the file to write to disk
65 * \param[in] short_image image short data
66 * \param[in] width image width
67 * \param[in] height image height
68 * \param[in] channels number of channels
69 * \ingroup io
70 */
71 PCL_EXPORTS void
72 saveShortPNGFile (const std::string& file_name, const unsigned short *short_image, int width, int height, int channels);
73
74 /** \brief Saves 8-bit encoded RGB image to PNG file.
75 * \param[in] file_name the name of the file to write to disk
76 * \param[in] rgb_image image rgb data
77 * \param[in] width image width
78 * \param[in] height image height
79 * \ingroup io
80 */
81 PCL_EXPORTS void
82 saveRgbPNGFile (const std::string& file_name, const unsigned char *rgb_image, int width, int height);
83
84 /** \brief Saves 8-bit grayscale cloud as image to PNG file.
85 * \param[in] file_name the name of the file to write to disk
86 * \param[in] cloud point cloud to save
87 * \ingroup io
88 */
89 PCL_EXPORTS void
90 savePNGFile (const std::string& file_name, const pcl::PointCloud<unsigned char>& cloud);
91
92 /** \brief Saves 16-bit grayscale cloud as image to PNG file.
93 * \param[in] file_name the name of the file to write to disk
94 * \param[in] cloud point cloud to save
95 * \ingroup io
96 */
97 PCL_EXPORTS void
98 savePNGFile (const std::string& file_name, const pcl::PointCloud<unsigned short>& cloud);
99
100 /** \brief Saves a PCLImage (formerly ROS sensor_msgs::Image) to PNG file.
101 * \param[in] file_name the name of the file to write to disk
102 * \param[in] image image to save
103 * \ingroup io
104 * \note Currently only "rgb8", "mono8", and "mono16" image encodings are supported.
105 */
106 PCL_EXPORTS void
107 savePNGFile (const std::string& file_name, const pcl::PCLImage& image);
108
109 /** \brief Saves the data from the specified field of the point cloud as image to PNG file.
110 * \param[in] file_name the name of the file to write to disk
111 * \param[in] cloud point cloud to save
112 * \param[in] field_name the name of the field to extract data from
113 * \ingroup io
114 */
115 template <typename PointT> void
116 savePNGFile (const std::string& file_name, const pcl::PointCloud<PointT>& cloud, const std::string& field_name)
117 {
120 if (field_name == "normal")
121 {
123 }
124 else if (field_name == "rgb")
125 {
127 }
128 else if (field_name == "label")
129 {
131 }
132 else if (field_name == "z")
133 {
135 }
136 else if (field_name == "curvature")
137 {
139 }
140 else if (field_name == "intensity")
141 {
143 }
144 else
145 {
146 PCL_ERROR ("[pcl::io::savePNGFile] Unsupported field \"%s\".\n", field_name.c_str ());
147 return;
148 }
149 pcl::PCLImage image;
150 if (pcie->extract (cloud, image))
151 {
152 savePNGFile(file_name, image);
153 }
154 else
155 {
156 PCL_ERROR ("[pcl::io::savePNGFile] Failed to extract an image from \"%s\" field.\n", field_name.c_str());
157 }
158 }
159
160 }
161}
Iterator class for point clouds with or without given indices.
PCL_EXPORTS void saveShortPNGFile(const std::string &file_name, const unsigned short *short_image, int width, int height, int channels)
Saves 16-bit encoded image to PNG file.
PCL_EXPORTS void saveRgbPNGFile(const std::string &file_name, const unsigned char *rgb_image, int width, int height)
Saves 8-bit encoded RGB image to PNG file.
PCL_EXPORTS void saveCharPNGFile(const std::string &file_name, const unsigned char *mono_image, int width, int height, int channels)
Saves 8-bit encoded image to PNG file.
PCL_EXPORTS void savePNGFile(const std::string &file_name, const pcl::PointCloud< unsigned char > &cloud)
Saves 8-bit grayscale cloud as image to PNG file.
Defines all the PCL and non-PCL macros used.