Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 4bc66056a634db26a1f4d0845dc41ca6 > files > 750

mrpt-doc-0.9.5-0.1.20110925svn2670.fc16.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>CImage.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> &gt; <b>C++ reference</b> </div>
<div align="right">
<a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a>
</div>
<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
          <div class="left">
            <form id="FSearchBox" action="search.php" method="get">
              <img id="MSearchSelect" src="search/mag.png" alt=""/>
              <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" 
                     onfocus="searchBox.OnSearchFieldFocus(true)" 
                     onblur="searchBox.OnSearchFieldFocus(false)"/>
            </form>
          </div><div class="right"></div>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">CImage.h</div>  </div>
</div>
<div class="contents">
<a href="_c_image_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +---------------------------------------------------------------------------+</span>
<a name="l00002"></a>00002 <span class="comment">   |          The Mobile Robot Programming Toolkit (MRPT) C++ library          |</span>
<a name="l00003"></a>00003 <span class="comment">   |                                                                           |</span>
<a name="l00004"></a>00004 <span class="comment">   |                       http://www.mrpt.org/                                |</span>
<a name="l00005"></a>00005 <span class="comment">   |                                                                           |</span>
<a name="l00006"></a>00006 <span class="comment">   |   Copyright (C) 2005-2011  University of Malaga                           |</span>
<a name="l00007"></a>00007 <span class="comment">   |                                                                           |</span>
<a name="l00008"></a>00008 <span class="comment">   |    This software was written by the Machine Perception and Intelligent    |</span>
<a name="l00009"></a>00009 <span class="comment">   |      Robotics Lab, University of Malaga (Spain).                          |</span>
<a name="l00010"></a>00010 <span class="comment">   |    Contact: Jose-Luis Blanco  &lt;jlblanco@ctima.uma.es&gt;                     |</span>
<a name="l00011"></a>00011 <span class="comment">   |                                                                           |</span>
<a name="l00012"></a>00012 <span class="comment">   |  This file is part of the MRPT project.                                   |</span>
<a name="l00013"></a>00013 <span class="comment">   |                                                                           |</span>
<a name="l00014"></a>00014 <span class="comment">   |     MRPT is free software: you can redistribute it and/or modify          |</span>
<a name="l00015"></a>00015 <span class="comment">   |     it under the terms of the GNU General Public License as published by  |</span>
<a name="l00016"></a>00016 <span class="comment">   |     the Free Software Foundation, either version 3 of the License, or     |</span>
<a name="l00017"></a>00017 <span class="comment">   |     (at your option) any later version.                                   |</span>
<a name="l00018"></a>00018 <span class="comment">   |                                                                           |</span>
<a name="l00019"></a>00019 <span class="comment">   |   MRPT is distributed in the hope that it will be useful,                 |</span>
<a name="l00020"></a>00020 <span class="comment">   |     but WITHOUT ANY WARRANTY; without even the implied warranty of        |</span>
<a name="l00021"></a>00021 <span class="comment">   |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |</span>
<a name="l00022"></a>00022 <span class="comment">   |     GNU General Public License for more details.                          |</span>
<a name="l00023"></a>00023 <span class="comment">   |                                                                           |</span>
<a name="l00024"></a>00024 <span class="comment">   |     You should have received a copy of the GNU General Public License     |</span>
<a name="l00025"></a>00025 <span class="comment">   |     along with MRPT.  If not, see &lt;http://www.gnu.org/licenses/&gt;.         |</span>
<a name="l00026"></a>00026 <span class="comment">   |                                                                           |</span>
<a name="l00027"></a>00027 <span class="comment">   +---------------------------------------------------------------------------+ */</span>
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef CImage_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define CImage_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;<a class="code" href="utils__defs_8h.html">mrpt/utils/utils_defs.h</a>&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;<a class="code" href="_c_serializable_8h.html">mrpt/utils/CSerializable.h</a>&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="_c_matrix_8h.html">mrpt/math/CMatrix.h</a>&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;<a class="code" href="_c_canvas_8h.html">mrpt/utils/CCanvas.h</a>&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;<a class="code" href="_t_camera_8h.html">mrpt/utils/TCamera.h</a>&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;<a class="code" href="os_8h.html">mrpt/system/os.h</a>&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;<a class="code" href="exceptions_8h.html">mrpt/utils/exceptions.h</a>&gt;</span>
<a name="l00038"></a>00038 
<a name="l00039"></a>00039 <span class="keyword">namespace </span>mrpt
<a name="l00040"></a>00040 {
<a name="l00041"></a>00041         <span class="keyword">namespace </span>utils
<a name="l00042"></a>00042         {<span class="comment"></span>
<a name="l00043"></a>00043 <span class="comment">                /** Interpolation methods for images.</span>
<a name="l00044"></a>00044 <span class="comment">                  *  Used for OpenCV related operations with images, but also with MRPT native classes.</span>
<a name="l00045"></a>00045 <span class="comment">                  * \sa mrpt::utils::CMappedImage, CImage::scaleImage</span>
<a name="l00046"></a>00046 <span class="comment">                 * \ingroup mrpt_base_grp</span>
<a name="l00047"></a>00047 <span class="comment">                  */</span>
<a name="l00048"></a><a class="code" href="group__mrpt__base__grp.html#gaaa1dce60212047066cc950eb834e96fd">00048</a>                 <span class="keyword">enum</span> <a class="code" href="group__mrpt__base__grp.html#gaaa1dce60212047066cc950eb834e96fd" title="Interpolation methods for images.">TInterpolationMethod</a>
<a name="l00049"></a>00049                 {
<a name="l00050"></a><a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda4a0d8049d078f18d5a655b4f50ad943c">00050</a>                         <a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda4a0d8049d078f18d5a655b4f50ad943c">IMG_INTERP_NN</a> = 0,
<a name="l00051"></a><a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda998c25e4b4040a1948a085e843acdb76">00051</a>                         <a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda998c25e4b4040a1948a085e843acdb76">IMG_INTERP_LINEAR</a>=1,
<a name="l00052"></a><a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda84a87b003bc5b51e87b2b6e3d43144b7">00052</a>                         <a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda84a87b003bc5b51e87b2b6e3d43144b7">IMG_INTERP_CUBIC</a>=2,
<a name="l00053"></a><a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda57bfbf4deebe359987bafa0fd1c6eec0">00053</a>                         <a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda57bfbf4deebe359987bafa0fd1c6eec0">IMG_INTERP_AREA</a>=3
<a name="l00054"></a>00054                 };
<a name="l00055"></a>00055 <span class="comment"></span>
<a name="l00056"></a>00056 <span class="comment">                /** For use in mrpt::utils::CImage */</span>
<a name="l00057"></a><a class="code" href="namespacemrpt_1_1utils.html#a8669b520cea0ec8220809c77721f60eb">00057</a>                 <span class="keyword">typedef</span> <span class="keywordtype">int</span>  <a class="code" href="namespacemrpt_1_1utils.html#a8669b520cea0ec8220809c77721f60eb" title="For use in mrpt::utils::CImage.">TImageChannels</a>;
<a name="l00058"></a><a class="code" href="_c_image_8h.html#a05d8a871017c9c7214faf67311e33525">00058</a> <span class="preprocessor">                #define CH_GRAY  1</span>
<a name="l00059"></a><a class="code" href="_c_image_8h.html#abbb5a64a224fe607fbf2fc5ac29e31cb">00059</a> <span class="preprocessor"></span><span class="preprocessor">                #define CH_RGB   3</span>
<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00061"></a>00061 <span class="comment">                /** For usage in one of the CImage constructors */</span>
<a name="l00062"></a><a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889f">00062</a>                 <span class="keyword">enum</span> <a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889f" title="For usage in one of the CImage constructors.">TConstructorFlags_CImage</a>
<a name="l00063"></a>00063                 {
<a name="l00064"></a><a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889fa1a19665aa9e0290bf5d5dc8295fdfc9c">00064</a>                         <a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889fa1a19665aa9e0290bf5d5dc8295fdfc9c">UNINITIALIZED_IMAGE</a> = 0,
<a name="l00065"></a><a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889fa5f66ba7e420abc6fe334f1099c10d6b2">00065</a>                         <a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889fa5f66ba7e420abc6fe334f1099c10d6b2">FAST_REF_OR_CONVERT_TO_GRAY</a> = 1
<a name="l00066"></a>00066                 };
<a name="l00067"></a>00067 
<a name="l00068"></a>00068                 <span class="comment">// This must be added to any CSerializable derived class:</span>
<a name="l00069"></a><a class="code" href="structmrpt_1_1utils_1_1_c_image_ptr.html#a2504cfbaef97d9edc8aa99fe25c18f93">00069</a>                 <a class="code" href="_c_serializable_8h.html#ab89b7a3de0a1baf5a5af4454add7d0f8" title="This declaration must be inserted in all CSerializable classes definition, before the class declarati...">DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE</a>( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>, <a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">mrpt::utils::CSerializable</a> )
<a name="l00070"></a>00070 
<a name="l00071"></a>00071                 <span class="comment">/** A class for storing images as grayscale or RGB bitmaps.</span>
<a name="l00072"></a>00072 <span class="comment">                 *  File I/O is supported in two different ways:</span>
<a name="l00073"></a>00073 <span class="comment">                 *              - Binary dump using the CSerializable interface(&lt;&lt; and &gt;&gt; operators), just as most objects</span>
<a name="l00074"></a>00074 <span class="comment">                 *          in the MRPT library. This format is not compatible with any standarized image format.</span>
<a name="l00075"></a>00075 <span class="comment">                 *              - Saving/loading from files of different formats (bmp,jpg,png,...) using the methods CImage::loadFromFile and CImage::saveToFile.</span>
<a name="l00076"></a>00076 <span class="comment">                 *</span>
<a name="l00077"></a>00077 <span class="comment">                 *  How to create color/grayscale images:</span>
<a name="l00078"></a>00078 <span class="comment">                 *  \code</span>
<a name="l00079"></a>00079 <span class="comment">                 *    CImage  img1(width, height,  CH_GRAY );  // Grayscale image (8U1C)</span>
<a name="l00080"></a>00080 <span class="comment">                 *    CImage  img2(width, height,  CH_RGB );  // RGB image (8U3C)</span>
<a name="l00081"></a>00081 <span class="comment">                 *  \endcode</span>
<a name="l00082"></a>00082 <span class="comment">                 *</span>
<a name="l00083"></a>00083 <span class="comment">                 * Additional notes:</span>
<a name="l00084"></a>00084 <span class="comment">                 *              - The OpenCV &quot;IplImage&quot; format is used internally for compatibility with all OpenCV functions. See CImage::getAsIplImage and CImage::getAs&lt;&gt;(). Example:</span>
<a name="l00085"></a>00085 <span class="comment">                 *         \code</span>
<a name="l00086"></a>00086 <span class="comment">                 *            CImage  img;</span>
<a name="l00087"></a>00087 <span class="comment">                 *            ...</span>
<a name="l00088"></a>00088 <span class="comment">                 *            // Call to OpenCV function expecting an &quot;IplImage *&quot; or a &quot;void* arr&quot;:</span>
<a name="l00089"></a>00089 <span class="comment">                 *            cvFunction( img.getAs&lt;IplImage&gt;(), ... );</span>
<a name="l00090"></a>00090 <span class="comment">                 *         \endcode</span>
<a name="l00091"></a>00091 <span class="comment">                 *              - Only the unsigned 8-bit storage format for pixels (on each channel) is supported.</span>
<a name="l00092"></a>00092 <span class="comment">                 *              - An external storage mode can be enabled by calling CImage::setExternalStorage, useful for storing large collections of image objects in memory while loading the image data itself only for the relevant images at any time.</span>
<a name="l00093"></a>00093 <span class="comment">                 *              - To move images from one object to the another, use CImage::copyFastFrom rather than the copy operator =.</span>
<a name="l00094"></a>00094 <span class="comment">                 *              - If you are interested in a smart pointer to an image, use:</span>
<a name="l00095"></a>00095 <span class="comment">                 *  \code</span>
<a name="l00096"></a>00096 <span class="comment">                 *    CImagePtr   myImgPtr = CImagePtr( new CImage(...) );</span>
<a name="l00097"></a>00097 <span class="comment">                 *  \endcode</span>
<a name="l00098"></a>00098 <span class="comment">                 *              - To set a CImage from an OpenCV &quot;IPLImage*&quot;, use the methods:</span>
<a name="l00099"></a>00099 <span class="comment">                 *                      - CImage::loadFromIplImage</span>
<a name="l00100"></a>00100 <span class="comment">                 *                      - CImage::setFromIplImage</span>
<a name="l00101"></a>00101 <span class="comment">                 *                      - CImage::CImage(void *IPL)</span>
<a name="l00102"></a>00102 <span class="comment">                 *</span>
<a name="l00103"></a>00103 <span class="comment">                 *   Some functions are implemented in MRPT with highly optimized SSE2/SSE3 routines, in suitable platforms and compilers. To</span>
<a name="l00104"></a>00104 <span class="comment">                 *   see the list of optimizations refer to \ref sse_optimizations &quot;this page&quot;. If optimized versions are not available in some</span>
<a name="l00105"></a>00105 <span class="comment">                 *   platform it falls back to default OpenCV methods.</span>
<a name="l00106"></a>00106 <span class="comment">                 *</span>
<a name="l00107"></a>00107 <span class="comment">                 * For many computer vision functions that use CImage as its image data type, see mrpt::vision.</span>
<a name="l00108"></a>00108 <span class="comment">                 *</span>
<a name="l00109"></a>00109 <span class="comment">                 * \note This class acts as a wrapper class to a small subset of OpenCV functions. IplImage is the internal storage structure.</span>
<a name="l00110"></a>00110 <span class="comment">                 *</span>
<a name="l00111"></a>00111 <span class="comment">                 * \sa mrpt::vision, mrpt::vision::CFeatureExtractor, mrpt::vision::CImagePyramid, CSerializable, CCanvas</span>
<a name="l00112"></a>00112 <span class="comment">                 * \ingroup mrpt_base_grp</span>
<a name="l00113"></a>00113 <span class="comment">                 */</span>
<a name="l00114"></a>00114                 class <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> : public mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">CSerializable</a>, public <a class="code" href="classmrpt_1_1utils_1_1_c_canvas.html" title="This virtual class defines the interface of any object accepting drawing primitives on it...">CCanvas</a>
<a name="l00115"></a>00115                 {
<a name="l00116"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ae442b489d8ef8baa26bba730953f4170">00116</a>                         <a class="code" href="_c_serializable_8h.html#a72ab55bf7ae009c89b75715cfa21e84d" title="This declaration must be inserted in all CSerializable classes definition, within the class declarati...">DEFINE_SERIALIZABLE</a>( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> )
<a name="l00117"></a>00117                 public:
<a name="l00118"></a>00118 
<a name="l00119"></a>00119                         <span class="comment">// ================================================================</span><span class="comment"></span>
<a name="l00120"></a>00120 <span class="comment">                        /** @name Constructors &amp; destructor</span>
<a name="l00121"></a>00121 <span class="comment">                            @{ */</span>
<a name="l00122"></a>00122 <span class="comment"></span>
<a name="l00123"></a>00123 <span class="comment">                        /** Default constructor: initialize an 1x1 RGB image. */</span>
<a name="l00124"></a>00124                         <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>();
<a name="l00125"></a>00125 <span class="comment"></span>
<a name="l00126"></a>00126 <span class="comment">                        /** Constructor for a given image size and type.</span>
<a name="l00127"></a>00127 <span class="comment">                          *  Examples:</span>
<a name="l00128"></a>00128 <span class="comment">                          *   \code</span>
<a name="l00129"></a>00129 <span class="comment">                          *    CImage  img1(width, height,  CH_GRAY );  // Grayscale image (8U1C)</span>
<a name="l00130"></a>00130 <span class="comment">                          *    CImage  img2(width, height,  CH_RGB );  // RGB image (8U3C)</span>
<a name="l00131"></a>00131 <span class="comment">                          *   \endcode</span>
<a name="l00132"></a>00132 <span class="comment">                          */</span>
<a name="l00133"></a>00133                         CImage( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    width,
<a name="l00134"></a>00134                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    height,
<a name="l00135"></a>00135                                         <a class="code" href="namespacemrpt_1_1utils.html#a8669b520cea0ec8220809c77721f60eb" title="For use in mrpt::utils::CImage.">TImageChannels</a>  nChannels = <a class="code" href="_c_image_8h.html#abbb5a64a224fe607fbf2fc5ac29e31cb">CH_RGB</a>,
<a name="l00136"></a>00136                                         <span class="keywordtype">bool</span>                    originTopLeft = true
<a name="l00137"></a>00137                                         );
<a name="l00138"></a>00138 <span class="comment"></span>
<a name="l00139"></a>00139 <span class="comment">                        /** Copy constructor, makes a full copy of the original image contents (unless it was externally stored, in that case, this new image will just point to the same image file). */</span>
<a name="l00140"></a>00140                         CImage( const CImage &amp;o );
<a name="l00141"></a>00141 <span class="comment"></span>
<a name="l00142"></a>00142 <span class="comment">                        /** Fast constructor that leaves the image uninitialized (the internal IplImage pointer set to NULL).</span>
<a name="l00143"></a>00143 <span class="comment">                          *  Use only when you know the image will be soon be assigned another image.</span>
<a name="l00144"></a>00144 <span class="comment">                          *  Example of usage:</span>
<a name="l00145"></a>00145 <span class="comment">                          *   \code</span>
<a name="l00146"></a>00146 <span class="comment">                          *    CImage myImg(UNINITIALIZED_IMAGE);</span>
<a name="l00147"></a>00147 <span class="comment">                          *   \endcode</span>
<a name="l00148"></a>00148 <span class="comment">                          */</span>
<a name="l00149"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ade84203bc74759aaf9df1211c98eae0c">00149</a>                         inline CImage(<a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889f" title="For usage in one of the CImage constructors.">TConstructorFlags_CImage</a> constructor_flag) : img(NULL),m_imgIsReadOnly(false), m_imgIsExternalStorage(false)
<a name="l00150"></a>00150                         { }
<a name="l00151"></a>00151 <span class="comment"></span>
<a name="l00152"></a>00152 <span class="comment">                        /** Fast constructor of a grayscale version of another image, making a &lt;b&gt;reference&lt;/b&gt; to the original image if it already was in grayscale, or otherwise creating a new grayscale image and converting the original image into it.</span>
<a name="l00153"></a>00153 <span class="comment">                          *   It&#39;s &lt;b&gt;very important to keep in mind&lt;/b&gt; that the original image can&#39;t be destroyed before the new object being created with this constructor.</span>
<a name="l00154"></a>00154 <span class="comment">                          * Example of usage:</span>
<a name="l00155"></a>00155 <span class="comment">                          *   \code</span>
<a name="l00156"></a>00156 <span class="comment">                          *     void my_func(const CImage &amp;in_img) {</span>
<a name="l00157"></a>00157 <span class="comment">                          *        const CImage gray_img(in_img, FAST_REF_OR_CONVERT_TO_GRAY);</span>
<a name="l00158"></a>00158 <span class="comment">                          *        // We can now operate on &quot;gray_img&quot; being sure it&#39;s in grayscale.</span>
<a name="l00159"></a>00159 <span class="comment">                          *     }</span>
<a name="l00160"></a>00160 <span class="comment">                          *   \endcode</span>
<a name="l00161"></a>00161 <span class="comment">                          */</span>
<a name="l00162"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a382ccd55b8e4f7c2f13a240706f80e81">00162</a>                         <span class="keyword">inline</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp; other_img, <a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889f" title="For usage in one of the CImage constructors.">TConstructorFlags_CImage</a> constructor_flag) : img(NULL),m_imgIsReadOnly(false), m_imgIsExternalStorage(false)
<a name="l00163"></a>00163                         {
<a name="l00164"></a>00164                                 <span class="keywordflow">if</span>( other_img.<a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a8b519b0a2e8419aea72308eb67060688" title="Returns true if the image is RGB, false if it is grayscale.">isColor</a>() ) other_img.<a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ad6c9a96cfc910c8a80a477e554f2094c" title="Returns a grayscale version of the image, or itself if it is already a grayscale image.">grayscale</a>(*<span class="keyword">this</span>);
<a name="l00165"></a>00165                                 <span class="keywordflow">else</span> this-&gt;setFromImageReadOnly(other_img);
<a name="l00166"></a>00166                         }
<a name="l00167"></a>00167 <span class="comment"></span>
<a name="l00168"></a>00168 <span class="comment">                        /** Constructor from an IPLImage*, making a copy of the image.</span>
<a name="l00169"></a>00169 <span class="comment">                          * \sa loadFromIplImage, setFromIplImage</span>
<a name="l00170"></a>00170 <span class="comment">                          */</span>
<a name="l00171"></a>00171                         <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>( <span class="keywordtype">void</span> *iplImage );
<a name="l00172"></a>00172 <span class="comment"></span>
<a name="l00173"></a>00173 <span class="comment">                        /** Explicit constructor from a matrix, interpreted as grayscale intensity values, in the range [0,1] (normalized=true) or [0,255] (normalized=false)</span>
<a name="l00174"></a>00174 <span class="comment">                          * \sa setFromMatrix</span>
<a name="l00175"></a>00175 <span class="comment">                          */</span>
<a name="l00176"></a>00176                         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Derived&gt;
<a name="l00177"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a2e6747f0fe14b495c614418f54003468">00177</a>                         <span class="keyword">explicit</span> <span class="keyword">inline</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>(<span class="keyword">const</span> <a class="code" href="class_eigen_1_1_matrix_base.html">Eigen::MatrixBase&lt;Derived&gt;</a> &amp;m, <span class="keywordtype">bool</span> matrix_is_normalized)
<a name="l00178"></a>00178                         {
<a name="l00179"></a>00179                                 this-&gt;setFromMatrix(m,matrix_is_normalized);
<a name="l00180"></a>00180                         }
<a name="l00181"></a>00181 
<a name="l00182"></a>00182 <span class="comment"></span>
<a name="l00183"></a>00183 <span class="comment">                        /** Destructor: */</span>
<a name="l00184"></a>00184                         <span class="keyword">virtual</span> ~<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>( );
<a name="l00185"></a>00185 <span class="comment"></span>
<a name="l00186"></a>00186 <span class="comment">                        /** @} */</span>
<a name="l00187"></a>00187                         <span class="comment">// ================================================================</span>
<a name="l00188"></a>00188 
<a name="l00189"></a>00189 <span class="comment"></span>
<a name="l00190"></a>00190 <span class="comment">                        /** By default, when storing images through the CSerializable interface, grayscale images will be ZIP compressed if they are larger than 16Kb: this flag can be turn on to disable ZIP compression and gain speed versus occupied space.</span>
<a name="l00191"></a>00191 <span class="comment">                          *  The default value of this variable is &quot;false&quot;.</span>
<a name="l00192"></a>00192 <span class="comment">                          */</span>
<a name="l00193"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a002a4087e154246234d5fe59261a812b">00193</a>                         <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a002a4087e154246234d5fe59261a812b" title="By default, when storing images through the CSerializable interface, grayscale images will be ZIP com...">DISABLE_ZIP_COMPRESSION</a>;
<a name="l00194"></a>00194 
<a name="l00195"></a>00195 
<a name="l00196"></a>00196                         <span class="comment">// ================================================================</span><span class="comment"></span>
<a name="l00197"></a>00197 <span class="comment">                        /** @name Manipulate the image contents or size, various computer-vision methods (image filters, undistortion, etc.)</span>
<a name="l00198"></a>00198 <span class="comment">                            @{ */</span>
<a name="l00199"></a>00199 <span class="comment"></span>
<a name="l00200"></a>00200 <span class="comment">                        /** Changes the size of the image, erasing previous contents (does NOT scale its current content, for that, see scaleImage).</span>
<a name="l00201"></a>00201 <span class="comment">                          *  - nChannels: Can be 3 for RGB images or 1 for grayscale images.</span>
<a name="l00202"></a>00202 <span class="comment">                          *  - originTopLeft: Is true if the top-left corner is (0,0). In other case, the reference is the bottom-left corner.</span>
<a name="l00203"></a>00203 <span class="comment">                          * \sa scaleImage</span>
<a name="l00204"></a>00204 <span class="comment">                          */</span>
<a name="l00205"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a77228d5ac964d44aa3ccd87ac958ab7a">00205</a>                         <span class="keyword">inline</span> <span class="keywordtype">void</span>  resize(
<a name="l00206"></a>00206                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    width,
<a name="l00207"></a>00207                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    height,
<a name="l00208"></a>00208                                         <a class="code" href="namespacemrpt_1_1utils.html#a8669b520cea0ec8220809c77721f60eb" title="For use in mrpt::utils::CImage.">TImageChannels</a>  nChannels,
<a name="l00209"></a>00209                                         <span class="keywordtype">bool</span>                    originTopLeft )
<a name="l00210"></a>00210                         {
<a name="l00211"></a>00211                                 changeSize(width,height,nChannels,originTopLeft);
<a name="l00212"></a>00212                         }
<a name="l00213"></a>00213 <span class="comment"></span>
<a name="l00214"></a>00214 <span class="comment">                        /** Scales this image to a new size, interpolating as needed.</span>
<a name="l00215"></a>00215 <span class="comment">                          * \sa resize, rotateImage</span>
<a name="l00216"></a>00216 <span class="comment">                          */</span>
<a name="l00217"></a>00217                         <span class="keywordtype">void</span> scaleImage( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height, <a class="code" href="group__mrpt__base__grp.html#gaaa1dce60212047066cc950eb834e96fd" title="Interpolation methods for images.">TInterpolationMethod</a> interp = <a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda84a87b003bc5b51e87b2b6e3d43144b7">IMG_INTERP_CUBIC</a> );
<a name="l00218"></a>00218 <span class="comment"></span>
<a name="l00219"></a>00219 <span class="comment">                        /** Scales this image to a new size, interpolating as needed, saving the new image in a different output object.</span>
<a name="l00220"></a>00220 <span class="comment">                          * \sa resize, rotateImage</span>
<a name="l00221"></a>00221 <span class="comment">                          */</span>
<a name="l00222"></a>00222                         <span class="keywordtype">void</span> scaleImage( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;out_img, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height, <a class="code" href="group__mrpt__base__grp.html#gaaa1dce60212047066cc950eb834e96fd" title="Interpolation methods for images.">TInterpolationMethod</a> interp = <a class="code" href="group__mrpt__base__grp.html#ggaaa1dce60212047066cc950eb834e96fda84a87b003bc5b51e87b2b6e3d43144b7">IMG_INTERP_CUBIC</a> ) <span class="keyword">const</span>;
<a name="l00223"></a>00223 <span class="comment"></span>
<a name="l00224"></a>00224 <span class="comment">                        /** Rotates the image by the given angle around the given center point, with an optional scale factor.</span>
<a name="l00225"></a>00225 <span class="comment">                          * \sa resize, scaleImage</span>
<a name="l00226"></a>00226 <span class="comment">                          */</span>
<a name="l00227"></a>00227                         <span class="keywordtype">void</span> rotateImage( <span class="keywordtype">double</span> angle_radians, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> center_x, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> center_y, <span class="keywordtype">double</span> scale = 1.0 );
<a name="l00228"></a>00228 <span class="comment"></span>
<a name="l00229"></a>00229 <span class="comment">                        /** Changes the value of the pixel (x,y).</span>
<a name="l00230"></a>00230 <span class="comment">                          *  Pixel coordinates starts at the left-top corner of the image, and start in (0,0).</span>
<a name="l00231"></a>00231 <span class="comment">                          *  The meaning of the parameter &quot;color&quot; depends on the implementation: it will usually</span>
<a name="l00232"></a>00232 <span class="comment">                          *   be a 24bit RGB value (0x00RRGGBB), but it can also be just a 8bit gray level.</span>
<a name="l00233"></a>00233 <span class="comment">                          *  This method must support (x,y) values OUT of the actual image size without neither</span>
<a name="l00234"></a>00234 <span class="comment">                          *   raising exceptions, nor leading to memory access errors.</span>
<a name="l00235"></a>00235 <span class="comment">                          */</span>
<a name="l00236"></a>00236                         <span class="keywordtype">void</span>  setPixel(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> <a class="code" href="namespace_eigen_1_1internal.html#a3d7a581aeb951248dc6fe114e9e05f07">y</a>, <span class="keywordtype">size_t</span> color);
<a name="l00237"></a>00237 <span class="comment"></span>
<a name="l00238"></a>00238 <span class="comment">                        /** Changes the property of the image stating if the top-left corner (vs. bottom-left) is the coordinate reference.</span>
<a name="l00239"></a>00239 <span class="comment">                          */</span>
<a name="l00240"></a>00240                         <span class="keywordtype">void</span>  setOriginTopLeft(<span class="keywordtype">bool</span> val);
<a name="l00241"></a>00241 <span class="comment"></span>
<a name="l00242"></a>00242 <span class="comment">                        /** Draws a line.</span>
<a name="l00243"></a>00243 <span class="comment">                          * \param x0 The starting point x coordinate</span>
<a name="l00244"></a>00244 <span class="comment">                          * \param y0 The starting point y coordinate</span>
<a name="l00245"></a>00245 <span class="comment">                          * \param x1 The end point x coordinate</span>
<a name="l00246"></a>00246 <span class="comment">                          * \param y1 The end point y coordinate</span>
<a name="l00247"></a>00247 <span class="comment">                          * \param color The color of the line</span>
<a name="l00248"></a>00248 <span class="comment">                          * \param width The desired width of the line (this is IGNORED in this virtual class)</span>
<a name="l00249"></a>00249 <span class="comment">                          *  This method may be redefined in some classes implementing this interface in a more appropiate manner.</span>
<a name="l00250"></a>00250 <span class="comment">                          */</span>
<a name="l00251"></a>00251                         <span class="keyword">virtual</span> <span class="keywordtype">void</span>  line(
<a name="l00252"></a>00252                                 <span class="keywordtype">int</span>                             x0,
<a name="l00253"></a>00253                                 <span class="keywordtype">int</span>                             y0,
<a name="l00254"></a>00254                                 <span class="keywordtype">int</span>                             x1,
<a name="l00255"></a>00255                                 <span class="keywordtype">int</span>                             y1,
<a name="l00256"></a>00256                                 <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1_t_color.html" title="A RGB color - 8bit.">mrpt::utils::TColor</a> color,
<a name="l00257"></a>00257                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    width = 1,
<a name="l00258"></a>00258                                 TPenStyle               penStyle = psSolid);
<a name="l00259"></a>00259 <span class="comment"></span>
<a name="l00260"></a>00260 <span class="comment">                        /** Draws a circle of a given radius.</span>
<a name="l00261"></a>00261 <span class="comment">                          * \param x The center - x coordinate in pixels.</span>
<a name="l00262"></a>00262 <span class="comment">                          * \param y The center - y coordinate in pixels.</span>
<a name="l00263"></a>00263 <span class="comment">                          * \param radius The radius - in pixels.</span>
<a name="l00264"></a>00264 <span class="comment">                          * \param color The color of the circle.</span>
<a name="l00265"></a>00265 <span class="comment">                          * \param width The desired width of the line</span>
<a name="l00266"></a>00266 <span class="comment">                          */</span>
<a name="l00267"></a>00267                         <span class="keywordtype">void</span>  drawCircle(
<a name="l00268"></a>00268                                 <span class="keywordtype">int</span>                             x,
<a name="l00269"></a>00269                                 <span class="keywordtype">int</span>                             <a class="code" href="namespace_eigen_1_1internal.html#a3d7a581aeb951248dc6fe114e9e05f07">y</a>,
<a name="l00270"></a>00270                                 <span class="keywordtype">int</span>                             radius,
<a name="l00271"></a>00271                                 <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1_t_color.html" title="A RGB color - 8bit.">mrpt::utils::TColor</a> &amp;color = <a class="code" href="structmrpt_1_1utils_1_1_t_color.html" title="A RGB color - 8bit.">mrpt::utils::TColor</a>(255,255,255),
<a name="l00272"></a>00272                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    width = 1);
<a name="l00273"></a>00273 
<a name="l00274"></a>00274                         <span class="keywordtype">void</span> equalizeHistInPlace(); <span class="comment">//!&lt; Equalize the image histogram, replacing the original image.</span>
<a name="l00275"></a>00275 <span class="comment"></span>                        <span class="keywordtype">void</span> equalizeHist( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>  &amp;outImg ) <span class="keyword">const</span>; <span class="comment">//!&lt; Equalize the image histogram, saving the new image in the given output object.</span>
<a name="l00276"></a>00276 <span class="comment"></span><span class="comment"></span>
<a name="l00277"></a>00277 <span class="comment">                        /** Returns a new image scaled down to half its original size.</span>
<a name="l00278"></a>00278 <span class="comment">                          * \exception std::exception On odd size</span>
<a name="l00279"></a>00279 <span class="comment">                          * \sa scaleDouble, scaleImage, scaleHalfSmooth</span>
<a name="l00280"></a>00280 <span class="comment">                          */</span>
<a name="l00281"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a4081b970421194842f33e085e3d64208">00281</a>                         <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>  scaleHalf()<span class="keyword">const</span>
<a name="l00282"></a>00282 <span class="keyword">                        </span>{
<a name="l00283"></a>00283                                 <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> ret(<a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889fa1a19665aa9e0290bf5d5dc8295fdfc9c">UNINITIALIZED_IMAGE</a>);
<a name="l00284"></a>00284                                 this-&gt;scaleHalf(ret);
<a name="l00285"></a>00285                                 <span class="keywordflow">return</span> ret;
<a name="l00286"></a>00286                         }
<a name="l00287"></a>00287 <span class="comment"></span>
<a name="l00288"></a>00288 <span class="comment">                        //! \overload</span>
<a name="l00289"></a>00289 <span class="comment"></span>                        <span class="keywordtype">void</span> scaleHalf(<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;out_image) <span class="keyword">const</span>;
<a name="l00290"></a>00290 
<a name="l00291"></a>00291 <span class="comment"></span>
<a name="l00292"></a>00292 <span class="comment">                        /** Returns a new image scaled down to half its original size (averaging between every two rows)</span>
<a name="l00293"></a>00293 <span class="comment">                          * \exception std::exception On odd size</span>
<a name="l00294"></a>00294 <span class="comment">                          * \sa scaleDouble, scaleImage, scaleHalf</span>
<a name="l00295"></a>00295 <span class="comment">                          */</span>
<a name="l00296"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a70e6eb2c8d81eebf6acc189eb694f59d">00296</a>                         <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>  scaleHalfSmooth()<span class="keyword">const</span>
<a name="l00297"></a>00297 <span class="keyword">                        </span>{
<a name="l00298"></a>00298                                 <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> ret(<a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889fa1a19665aa9e0290bf5d5dc8295fdfc9c">UNINITIALIZED_IMAGE</a>);
<a name="l00299"></a>00299                                 this-&gt;scaleHalfSmooth(ret);
<a name="l00300"></a>00300                                 <span class="keywordflow">return</span> ret;
<a name="l00301"></a>00301                         }
<a name="l00302"></a>00302 <span class="comment"></span>
<a name="l00303"></a>00303 <span class="comment">                        //! \overload</span>
<a name="l00304"></a>00304 <span class="comment"></span>                        <span class="keywordtype">void</span> scaleHalfSmooth(<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;out_image) <span class="keyword">const</span>;
<a name="l00305"></a>00305 
<a name="l00306"></a>00306 <span class="comment"></span>
<a name="l00307"></a>00307 <span class="comment">                        /** Returns a new image scaled up to double its original size.</span>
<a name="l00308"></a>00308 <span class="comment">                          * \exception std::exception On odd size</span>
<a name="l00309"></a>00309 <span class="comment">                          * \sa scaleHalf, scaleImage</span>
<a name="l00310"></a>00310 <span class="comment">                          */</span>
<a name="l00311"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a74a66af9b4d7f4ee2e28d4281f654e4b">00311</a>                         <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>  scaleDouble()<span class="keyword">const</span>
<a name="l00312"></a>00312 <span class="keyword">                        </span>{
<a name="l00313"></a>00313                                 <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> ret(<a class="code" href="namespacemrpt_1_1utils.html#a3769f80743e0397ea2fd598c6029889fa1a19665aa9e0290bf5d5dc8295fdfc9c">UNINITIALIZED_IMAGE</a>);
<a name="l00314"></a>00314                                 this-&gt;scaleDouble(ret);
<a name="l00315"></a>00315                                 <span class="keywordflow">return</span> ret;
<a name="l00316"></a>00316                         }
<a name="l00317"></a>00317 <span class="comment"></span>
<a name="l00318"></a>00318 <span class="comment">                       //! \overload</span>
<a name="l00319"></a>00319 <span class="comment"></span>                       <span class="keywordtype">void</span> scaleDouble(<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;out_image) <span class="keyword">const</span>;
<a name="l00320"></a>00320 
<a name="l00321"></a>00321 <span class="comment"></span>
<a name="l00322"></a>00322 <span class="comment">                        /** Update a part of this image with the &quot;patch&quot; given as argument.</span>
<a name="l00323"></a>00323 <span class="comment">                         * The &quot;patch&quot; will be &quot;pasted&quot; at the (col,row) coordinates of this image.</span>
<a name="l00324"></a>00324 <span class="comment">                         * \exception std::exception if patch pasted on the pixel (_row, _column) jut out</span>
<a name="l00325"></a>00325 <span class="comment">                         * of the image.</span>
<a name="l00326"></a>00326 <span class="comment">                         * \sa extract_patch</span>
<a name="l00327"></a>00327 <span class="comment">                         */</span>
<a name="l00328"></a>00328                         <span class="keywordtype">void</span> update_patch(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;patch,
<a name="l00329"></a>00329                                           <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> col,
<a name="l00330"></a>00330                                           <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> row);
<a name="l00331"></a>00331 <span class="comment"></span>
<a name="l00332"></a>00332 <span class="comment">                        /** Extract a patch from this image, saveing it into &quot;patch&quot; (its previous contents will be overwritten).</span>
<a name="l00333"></a>00333 <span class="comment">                          *  The patch to extract starts at (col,row) and has the given dimensions.</span>
<a name="l00334"></a>00334 <span class="comment">                          * \sa update_patch</span>
<a name="l00335"></a>00335 <span class="comment">                          */</span>
<a name="l00336"></a>00336                         <span class="keywordtype">void</span>  extract_patch(
<a name="l00337"></a>00337                                 <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>  &amp;patch,
<a name="l00338"></a>00338                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>      col=0,
<a name="l00339"></a>00339                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>      row=0,
<a name="l00340"></a>00340                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>      width=1,
<a name="l00341"></a>00341                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>      height=1 ) <span class="keyword">const</span>;
<a name="l00342"></a>00342 <span class="comment"></span>
<a name="l00343"></a>00343 <span class="comment">                        /** Computes the correlation coefficient (returned as val), between two images</span>
<a name="l00344"></a>00344 <span class="comment">                        *       This function use grayscale images only</span>
<a name="l00345"></a>00345 <span class="comment">                        *       img1, img2 must be same size</span>
<a name="l00346"></a>00346 <span class="comment">                        * (by AJOGD @ DEC-2006)</span>
<a name="l00347"></a>00347 <span class="comment">                        */</span>
<a name="l00348"></a>00348                         <span class="keywordtype">float</span>  correlate( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;img2int, <span class="keywordtype">int</span> width_init=0, <span class="keywordtype">int</span> height_init=0 )<span class="keyword">const</span>;
<a name="l00349"></a>00349 <span class="comment"></span>
<a name="l00350"></a>00350 <span class="comment">                        /**     Computes the correlation between this image and another one, encapsulating the openCV function cvMatchTemplate</span>
<a name="l00351"></a>00351 <span class="comment">                        *</span>
<a name="l00352"></a>00352 <span class="comment">                        * \param patch_img The &quot;patch&quot; image, which must be equal, or smaller than &quot;this&quot; image. This function supports gray-scale (1 channel only) images.</span>
<a name="l00353"></a>00353 <span class="comment">                        * \param u_search_ini The &quot;x&quot; coordinate of the search window.</span>
<a name="l00354"></a>00354 <span class="comment">                        * \param v_search_ini The &quot;y&quot; coordinate of the search window.</span>
<a name="l00355"></a>00355 <span class="comment">                        * \param u_search_size The width of the search window.</span>
<a name="l00356"></a>00356 <span class="comment">                        * \param v_search_size The height of the search window.</span>
<a name="l00357"></a>00357 <span class="comment">                        * \param u_max The u coordinate where find the maximun cross correlation value.</span>
<a name="l00358"></a>00358 <span class="comment">                        * \param v_max The v coordinate where find the maximun cross correlation value</span>
<a name="l00359"></a>00359 <span class="comment">                        * \param max_val The maximun value of cross correlation which we can find</span>
<a name="l00360"></a>00360 <span class="comment">                        * \param out_corr_image  If a !=NULL pointer is provided, it will be saved here the correlation image. The size of the output image is (this_width-patch_width+1, this_height-patch_height+1 )</span>
<a name="l00361"></a>00361 <span class="comment">                        *  Note: By default, the search area is the whole (this) image.</span>
<a name="l00362"></a>00362 <span class="comment">                        * (by AJOGD @ MAR-2007)</span>
<a name="l00363"></a>00363 <span class="comment">                        */</span>
<a name="l00364"></a>00364                         <span class="keywordtype">void</span>  cross_correlation(
<a name="l00365"></a>00365                                 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>    &amp;patch_img,
<a name="l00366"></a>00366                                 <span class="keywordtype">size_t</span>                          &amp;u_max,
<a name="l00367"></a>00367                                 <span class="keywordtype">size_t</span>                          &amp;v_max,
<a name="l00368"></a>00368                                 <span class="keywordtype">double</span>                          &amp;max_val,
<a name="l00369"></a>00369                                 <span class="keywordtype">int</span>                                     u_search_ini=-1,
<a name="l00370"></a>00370                                 <span class="keywordtype">int</span>                                     v_search_ini=-1,
<a name="l00371"></a>00371                                 <span class="keywordtype">int</span>                                     u_search_size=-1,
<a name="l00372"></a>00372                                 <span class="keywordtype">int</span>                                     v_search_size=-1,
<a name="l00373"></a>00373                                 <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>                          *out_corr_image = NULL
<a name="l00374"></a>00374                                 )<span class="keyword">const</span>;
<a name="l00375"></a>00375 <span class="comment"></span>
<a name="l00376"></a>00376 <span class="comment">                        /**     Computes the correlation matrix between this image and another one.</span>
<a name="l00377"></a>00377 <span class="comment">                        *   This implementation uses the 2D FFT for achieving reduced computation time.</span>
<a name="l00378"></a>00378 <span class="comment">                        * \param in_img The &quot;patch&quot; image, which must be equal, or smaller than &quot;this&quot; image. This function supports gray-scale (1 channel only) images.</span>
<a name="l00379"></a>00379 <span class="comment">                        * \param u_search_ini The &quot;x&quot; coordinate of the search window.</span>
<a name="l00380"></a>00380 <span class="comment">                        * \param v_search_ini The &quot;y&quot; coordinate of the search window.</span>
<a name="l00381"></a>00381 <span class="comment">                        * \param u_search_size The width of the search window.</span>
<a name="l00382"></a>00382 <span class="comment">                        * \param v_search_size The height of the search window.</span>
<a name="l00383"></a>00383 <span class="comment">                        * \param out_corr The output for the correlation matrix, which will be &quot;u_search_size&quot; x &quot;v_search_size&quot;</span>
<a name="l00384"></a>00384 <span class="comment">                        * \param biasThisImg This optional parameter is a fixed &quot;bias&quot; value to be substracted to the pixels of &quot;this&quot; image before performing correlation.</span>
<a name="l00385"></a>00385 <span class="comment">                        * \param biasInImg This optional parameter is a fixed &quot;bias&quot; value to be substracted to the pixels of &quot;in_img&quot; image before performing correlation.</span>
<a name="l00386"></a>00386 <span class="comment">                        *  Note: By default, the search area is the whole (this) image.</span>
<a name="l00387"></a>00387 <span class="comment">                        * (by JLBC @ JAN-2006)</span>
<a name="l00388"></a>00388 <span class="comment">                        * \sa cross_correlation</span>
<a name="l00389"></a>00389 <span class="comment">                        */</span>
<a name="l00390"></a>00390                         <span class="keywordtype">void</span>  <a class="code" href="group__fourier__grp.html#gaf73df6c1be447d2a0e514d912f499bdc" title="Correlation of two matrixes using 2D FFT.">cross_correlation_FFT</a>(
<a name="l00391"></a>00391                                 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>    &amp;in_img,
<a name="l00392"></a>00392                                 <a class="code" href="classmrpt_1_1math_1_1_c_matrix_template_numeric.html" title="A matrix of dynamic size.">math::CMatrixFloat</a>              &amp;out_corr,
<a name="l00393"></a>00393                                 <span class="keywordtype">int</span>                                     u_search_ini=-1,
<a name="l00394"></a>00394                                 <span class="keywordtype">int</span>                                     v_search_ini=-1,
<a name="l00395"></a>00395                                 <span class="keywordtype">int</span>                                     u_search_size=-1,
<a name="l00396"></a>00396                                 <span class="keywordtype">int</span>                                     v_search_size=-1,
<a name="l00397"></a>00397                                 <span class="keywordtype">float</span>                           biasThisImg = 0,
<a name="l00398"></a>00398                                 <span class="keywordtype">float</span>                           biasInImg = 0
<a name="l00399"></a>00399                                 ) <span class="keyword">const</span>;
<a name="l00400"></a>00400 
<a name="l00401"></a>00401 <span class="comment"></span>
<a name="l00402"></a>00402 <span class="comment">                        /** Optimize de brightness range of a image without using histogram</span>
<a name="l00403"></a>00403 <span class="comment">                        * Only for one channel images.</span>
<a name="l00404"></a>00404 <span class="comment">                        */</span>
<a name="l00405"></a>00405                         <span class="keywordtype">void</span>  <a class="code" href="eigen__plugins_8h.html#a9fa151d57c4246db2c3aed3642dd249b" title="Scales all elements such as the minimum &amp; maximum values are shifted to the given values...">normalize</a>();
<a name="l00406"></a>00406 <span class="comment"></span>
<a name="l00407"></a>00407 <span class="comment">                        /** Flips vertically the image.</span>
<a name="l00408"></a>00408 <span class="comment">                          * \sa swapRB</span>
<a name="l00409"></a>00409 <span class="comment">                          */</span>
<a name="l00410"></a>00410                         <span class="keywordtype">void</span> flipVertical(<span class="keywordtype">bool</span> also_swapRB = <span class="keyword">false</span>);
<a name="l00411"></a>00411 <span class="comment"></span>
<a name="l00412"></a>00412 <span class="comment">                        /** Swaps red and blue channels.</span>
<a name="l00413"></a>00413 <span class="comment">                          * \sa flipVertical</span>
<a name="l00414"></a>00414 <span class="comment">                          */</span>
<a name="l00415"></a>00415                         <span class="keywordtype">void</span> swapRB();
<a name="l00416"></a>00416 <span class="comment"></span>
<a name="l00417"></a>00417 <span class="comment">                        /** Rectify (un-distort) the image according to some camera parameters, and returns an output un-distorted image.</span>
<a name="l00418"></a>00418 <span class="comment">                          * \param out_img The output rectified image</span>
<a name="l00419"></a>00419 <span class="comment">                          * \param cameraParams The input camera params (containing the intrinsic and distortion parameters of the camera)</span>
<a name="l00420"></a>00420 <span class="comment">                          */</span>
<a name="l00421"></a>00421                         <span class="keywordtype">void</span> rectifyImage( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;out_img, <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_t_camera.html" title="Structure to hold the parameters of a pinhole camera model.">mrpt::utils::TCamera</a> &amp;cameraParams) <span class="keyword">const</span>;
<a name="l00422"></a>00422 <span class="comment"></span>
<a name="l00423"></a>00423 <span class="comment">                        /** Rectify (un-distort) the image according to a certain camera matrix and vector of distortion coefficients and returns an output rectified image</span>
<a name="l00424"></a>00424 <span class="comment">                          * \param out_img The output rectified image</span>
<a name="l00425"></a>00425 <span class="comment">                          * \param cameraMatrix The input camera matrix (containing the intrinsic parameters of the camera): [fx 0 cx; 0 fy cy; 0 0 1]: (fx,fy)  focal length and (cx,cy) principal point coordinates</span>
<a name="l00426"></a>00426 <span class="comment">                          * \param distCoeff The (input) distortion coefficients: [k1, k2, p1, p2]:  k1 and k2 (radial) and p1 and p2 (tangential)</span>
<a name="l00427"></a>00427 <span class="comment">                          */</span>
<a name="l00428"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a4ca10a7c221a9b33620d4ac25424944a">00428</a>                         <span class="keyword">inline</span> <span class="keywordtype">void</span> rectifyImage( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;out_img, <span class="keyword">const</span> <a class="code" href="classmrpt_1_1math_1_1_c_matrix_fixed_numeric.html">math::CMatrixDouble33</a> &amp;cameraMatrix, <span class="keyword">const</span> <a class="code" href="structmrpt_1_1dynamicsize__vector.html" title="The base class of MRPT vectors, actually, Eigen column matrices of dynamic size with specialized cons...">vector_double</a> &amp;distCoeff )<span class="keyword"> const</span>
<a name="l00429"></a>00429 <span class="keyword">                        </span>{
<a name="l00430"></a>00430                                 mrpt<a class="code" href="classmrpt_1_1utils_1_1_t_camera.html" title="Structure to hold the parameters of a pinhole camera model.">::utils::TCamera</a>  cam;
<a name="l00431"></a>00431                                 cam.<a class="code" href="classmrpt_1_1utils_1_1_t_camera.html#a1960e92075ca70228300e627f2965af7" title="Matrix of intrinsic parameters (containing the focal length and principal point coordinates)">intrinsicParams</a> = cameraMatrix;
<a name="l00432"></a>00432                                 cam.<a class="code" href="classmrpt_1_1utils_1_1_t_camera.html#a1f40934d99e0b5cb6608f6319e9a00b6" title="Set the whole vector of distortion params of the camera.">setDistortionParamsVector</a>(distCoeff);
<a name="l00433"></a>00433                                 rectifyImage(out_img,cam);
<a name="l00434"></a>00434                         }
<a name="l00435"></a>00435 <span class="comment"></span>
<a name="l00436"></a>00436 <span class="comment">                        /** Rectify (un-distort) the image according to a certain camera matrix and vector of distortion coefficients, replacing &quot;this&quot; with the rectified image</span>
<a name="l00437"></a>00437 <span class="comment">                          * \param cameraParams The input camera params (containing the intrinsic and distortion parameters of the camera)</span>
<a name="l00438"></a>00438 <span class="comment">                          */</span>
<a name="l00439"></a>00439                         <span class="keywordtype">void</span> rectifyImageInPlace(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_t_camera.html" title="Structure to hold the parameters of a pinhole camera model.">mrpt::utils::TCamera</a> &amp;cameraParams );
<a name="l00440"></a>00440 <span class="comment"></span>
<a name="l00441"></a>00441 <span class="comment">                        /** Rectify (un-distort) the image according to a certain camera matrix and vector of distortion coefficients, replacing &quot;this&quot; with the rectified image</span>
<a name="l00442"></a>00442 <span class="comment">                          * \param cameraMatrix The input camera matrix (containing the intrinsic parameters of the camera): [fx 0 cx; 0 fy cy; 0 0 1]: (fx,fy)  focal length and (cx,cy) principal point coordinates</span>
<a name="l00443"></a>00443 <span class="comment">                          * \param distCoeff The (input) distortion coefficients: [k1, k2, p1, p2]:  k1 and k2 (radial) and p1 and p2 (tangential)</span>
<a name="l00444"></a>00444 <span class="comment">                          */</span>
<a name="l00445"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#aebe1d754f737065f146fa6afc7fd1d48">00445</a>                         <span class="keyword">inline</span> <span class="keywordtype">void</span> rectifyImageInPlace( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1math_1_1_c_matrix_fixed_numeric.html">math::CMatrixDouble33</a> &amp;cameraMatrix, <span class="keyword">const</span> <a class="code" href="structmrpt_1_1dynamicsize__vector.html" title="The base class of MRPT vectors, actually, Eigen column matrices of dynamic size with specialized cons...">vector_double</a> &amp;distCoeff )
<a name="l00446"></a>00446                         {
<a name="l00447"></a>00447                                 mrpt<a class="code" href="classmrpt_1_1utils_1_1_t_camera.html" title="Structure to hold the parameters of a pinhole camera model.">::utils::TCamera</a>  cam;
<a name="l00448"></a>00448                                 cam.<a class="code" href="classmrpt_1_1utils_1_1_t_camera.html#a1960e92075ca70228300e627f2965af7" title="Matrix of intrinsic parameters (containing the focal length and principal point coordinates)">intrinsicParams</a> = cameraMatrix;
<a name="l00449"></a>00449                                 cam.<a class="code" href="classmrpt_1_1utils_1_1_t_camera.html#a1f40934d99e0b5cb6608f6319e9a00b6" title="Set the whole vector of distortion params of the camera.">setDistortionParamsVector</a>(distCoeff);
<a name="l00450"></a>00450                                 rectifyImageInPlace(cam);
<a name="l00451"></a>00451                         }
<a name="l00452"></a>00452 <span class="comment"></span>
<a name="l00453"></a>00453 <span class="comment">                        /** Rectify an image (undistorts and rectification) from a stereo pair according to a pair of precomputed rectification maps</span>
<a name="l00454"></a>00454 <span class="comment">                          * \param mapX, mapY   [IN] The pre-computed maps of the rectification (should be computed beforehand)</span>
<a name="l00455"></a>00455 <span class="comment">                          * \sa vision::computeStereoRectificationMaps</span>
<a name="l00456"></a>00456 <span class="comment">                          */</span>
<a name="l00457"></a>00457             <span class="keywordtype">void</span> rectifyImageInPlace( <span class="keywordtype">void</span> *mapX, <span class="keywordtype">void</span> *mapY );
<a name="l00458"></a>00458 <span class="comment"></span>
<a name="l00459"></a>00459 <span class="comment">                        /** Filter the image with a Median filter with a window size WxW, returning the filtered image in out_img  */</span>
<a name="l00460"></a>00460                         <span class="keywordtype">void</span> filterMedian( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;out_img, <span class="keywordtype">int</span> W=3 ) <span class="keyword">const</span>;
<a name="l00461"></a>00461 <span class="comment"></span>
<a name="l00462"></a>00462 <span class="comment">                        /** Filter the image with a Median filter with a window size WxH, replacing &quot;this&quot; image by the filtered one. */</span>
<a name="l00463"></a>00463                         <span class="keywordtype">void</span> filterMedianInPlace( <span class="keywordtype">int</span> W=3 );
<a name="l00464"></a>00464 <span class="comment"></span>
<a name="l00465"></a>00465 <span class="comment">                        /** Filter the image with a Gaussian filter with a window size WxH, returning the filtered image in out_img  */</span>
<a name="l00466"></a>00466                         <span class="keywordtype">void</span> filterGaussianInPlace( <span class="keywordtype">int</span> W = 3, <span class="keywordtype">int</span> H = 3 );
<a name="l00467"></a>00467 <span class="comment"></span>
<a name="l00468"></a>00468 <span class="comment">                        /** Filter the image with a Gaussian filter with a window size WxH, replacing &quot;this&quot; image by the filtered one. */</span>
<a name="l00469"></a>00469                         <span class="keywordtype">void</span> filterGaussian( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;out_img, <span class="keywordtype">int</span> W = 3, <span class="keywordtype">int</span> H = 3) <span class="keyword">const</span>;
<a name="l00470"></a>00470 <span class="comment"></span>
<a name="l00471"></a>00471 <span class="comment">                        /** Draw onto this image the detected corners of a chessboard. The length of cornerCoords must be the product of the two check_sizes.</span>
<a name="l00472"></a>00472 <span class="comment">                          *</span>
<a name="l00473"></a>00473 <span class="comment">                          * \param cornerCoords [IN] The pixel coordinates of all the corners.</span>
<a name="l00474"></a>00474 <span class="comment">                          * \param check_size_x [IN] The number of squares, in the X direction</span>
<a name="l00475"></a>00475 <span class="comment">                          * \param check_size_y [IN] The number of squares, in the Y direction</span>
<a name="l00476"></a>00476 <span class="comment">                          *</span>
<a name="l00477"></a>00477 <span class="comment">                          * \return false if the length of cornerCoords is inconsistent (nothing is drawn then).</span>
<a name="l00478"></a>00478 <span class="comment">                          *</span>
<a name="l00479"></a>00479 <span class="comment">                          * \sa mrpt::vision::findChessboardCorners</span>
<a name="l00480"></a>00480 <span class="comment">                          */</span>
<a name="l00481"></a>00481                         <span class="keywordtype">bool</span> drawChessboardCorners(
<a name="l00482"></a>00482                                 <a class="code" href="classstd_1_1vector.html">std::vector&lt;TPixelCoordf&gt;</a>       &amp;cornerCoords,
<a name="l00483"></a>00483                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>  check_size_x,
<a name="l00484"></a>00484                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>  check_size_y );
<a name="l00485"></a>00485 <span class="comment"></span>
<a name="l00486"></a>00486 <span class="comment">                        /** Joins two images side-by-side horizontally. Both images must have the same number of rows and be of the same type (i.e. depth and color mode)</span>
<a name="l00487"></a>00487 <span class="comment">                          *</span>
<a name="l00488"></a>00488 <span class="comment">                          * \param im1 [IN] The first image.</span>
<a name="l00489"></a>00489 <span class="comment">                          * \param im2 [IN] The other image.</span>
<a name="l00490"></a>00490 <span class="comment">                          */</span>
<a name="l00491"></a>00491                         <span class="keywordtype">void</span> joinImagesHorz(
<a name="l00492"></a>00492                                 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;im1,
<a name="l00493"></a>00493                                 <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;im2 );
<a name="l00494"></a>00494 <span class="comment"></span>
<a name="l00495"></a>00495 <span class="comment">                        /** Compute the KLT response at a given pixel (x,y) - Only for grayscale images (for efficiency it avoids converting to grayscale internally).</span>
<a name="l00496"></a>00496 <span class="comment">                          *  See KLT_response_optimized for more details on the internal optimizations of this method, but this graph shows a general view:</span>
<a name="l00497"></a>00497 <span class="comment">                          *  &lt;img src=&quot;KLT_response_performance_SSE2.png&quot; &gt;</span>
<a name="l00498"></a>00498 <span class="comment">                          */</span>
<a name="l00499"></a>00499                         <span class="keywordtype">float</span> KLT_response(
<a name="l00500"></a>00500                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x,
<a name="l00501"></a>00501                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y,
<a name="l00502"></a>00502                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> half_window_size ) <span class="keyword">const</span>;
<a name="l00503"></a>00503 <span class="comment"></span>
<a name="l00504"></a>00504 <span class="comment">                        /** @} */</span>
<a name="l00505"></a>00505                         <span class="comment">// ================================================================</span>
<a name="l00506"></a>00506 
<a name="l00507"></a>00507 
<a name="l00508"></a>00508 
<a name="l00509"></a>00509                         <span class="comment">// ================================================================</span><span class="comment"></span>
<a name="l00510"></a>00510 <span class="comment">                        /** @name Copy, move &amp; swap  operations</span>
<a name="l00511"></a>00511 <span class="comment">                            @{ */</span>
<a name="l00512"></a>00512 <span class="comment"></span>
<a name="l00513"></a>00513 <span class="comment">                        /** Copy operator (if the image is externally stored, the writen image will be such as well).</span>
<a name="l00514"></a>00514 <span class="comment">                          * \sa copyFastFrom</span>
<a name="l00515"></a>00515 <span class="comment">                          */</span>
<a name="l00516"></a>00516                         <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp; operator = (<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>&amp; o);
<a name="l00517"></a>00517 <span class="comment"></span>
<a name="l00518"></a>00518 <span class="comment">                        /** Copies from another image, and, if that one is externally stored, the image file will be actually loaded into memory in &quot;this&quot; object.</span>
<a name="l00519"></a>00519 <span class="comment">                          * \sa operator =</span>
<a name="l00520"></a>00520 <span class="comment">                          */</span>
<a name="l00521"></a>00521                         <span class="keywordtype">void</span> copyFromForceLoad(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;o);
<a name="l00522"></a>00522 <span class="comment"></span>
<a name="l00523"></a>00523 <span class="comment">                        /** Moves an image from another object, erasing the origin image in the process (this is much faster than copying)</span>
<a name="l00524"></a>00524 <span class="comment">                          * \sa operator =</span>
<a name="l00525"></a>00525 <span class="comment">                          */</span>
<a name="l00526"></a>00526                         <span class="keywordtype">void</span> copyFastFrom( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;o );
<a name="l00527"></a>00527 
<a name="l00528"></a>00528                         <span class="keywordtype">void</span> swap(<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;o); <span class="comment">//!&lt; Very efficient swap of two images (just swap the internal pointers)</span>
<a name="l00529"></a>00529 <span class="comment"></span><span class="comment"></span>
<a name="l00530"></a>00530 <span class="comment">                        /** @} */</span>
<a name="l00531"></a>00531                         <span class="comment">// ================================================================</span>
<a name="l00532"></a>00532 
<a name="l00533"></a>00533 
<a name="l00534"></a>00534                         <span class="comment">// ================================================================</span><span class="comment"></span>
<a name="l00535"></a>00535 <span class="comment">                        /** @name Access to image contents (IplImage structure and raw pixels).</span>
<a name="l00536"></a>00536 <span class="comment">                            @{ */</span>
<a name="l00537"></a>00537 <span class="comment"></span>
<a name="l00538"></a>00538 <span class="comment">                        /** Returns a pointer to an T* containing the image - the idea is to call like &quot;img.getAs&lt;IplImage&gt;()&quot; so we can avoid here including OpenCV&#39;s headers. \sa getAsIplImage */</span>
<a name="l00539"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a6eb49fc77a2c2830187ed5225e8744d1">00539</a>                         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">inline</span> <span class="keyword">const</span> T* <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a6eb49fc77a2c2830187ed5225e8744d1" title="Returns a pointer to an T* containing the image - the idea is to call like &quot;img.getAs&lt;IplImage&gt;()&quot; so...">getAs</a>()<span class="keyword"> const </span>{
<a name="l00540"></a>00540                                 makeSureImageIsLoaded();
<a name="l00541"></a>00541                                 <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>T*<span class="keyword">&gt;</span>(img);
<a name="l00542"></a>00542                         }<span class="comment"></span>
<a name="l00543"></a>00543 <span class="comment">                        /** Returns a pointer to an T* containing the image - the idea is to call like &quot;img.getAs&lt;IplImage&gt;()&quot; so we can avoid here including OpenCV&#39;s headers. \sa getAsIplImage */</span>
<a name="l00544"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a26f034e5d3ffab83a41326a6f6fdf5a4">00544</a>                         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">inline</span> T* <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a26f034e5d3ffab83a41326a6f6fdf5a4" title="Returns a pointer to an T* containing the image - the idea is to call like &quot;img.getAs&lt;IplImage&gt;()&quot; so...">getAs</a>(){
<a name="l00545"></a>00545                                 makeSureImageIsLoaded();
<a name="l00546"></a>00546                                 <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>T*<span class="keyword">&gt;</span>(img);
<a name="l00547"></a>00547                         }
<a name="l00548"></a>00548 <span class="comment"></span>
<a name="l00549"></a>00549 <span class="comment">                        /** Returns a pointer to an OpenCV&#39;s IplImage struct containing the image, which is linked to this class: free neigther that pointer nor this class until they are not required anymore, since this class is in charge of freeing the memory buffers inside of the returned image.  \sa getAs */</span>
<a name="l00550"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ab827a411abbe4e37fe0837cbd28ecc99">00550</a>                         <span class="keyword">inline</span> <span class="keywordtype">void</span>*  <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ab827a411abbe4e37fe0837cbd28ecc99" title="Returns a pointer to an OpenCV&#39;s IplImage struct containing the image, which is linked to this class:...">getAsIplImage</a>()<span class="keyword"> const </span>{
<a name="l00551"></a>00551                                 makeSureImageIsLoaded();
<a name="l00552"></a>00552                                 <span class="keywordflow">return</span> img;
<a name="l00553"></a>00553                         }
<a name="l00554"></a>00554 <span class="comment"></span>
<a name="l00555"></a>00555 <span class="comment">                        /**  Access to pixels without checking boundaries - Use normally the () operator better, which checks the coordinates.</span>
<a name="l00556"></a>00556 <span class="comment">                          \sa CImage::operator()</span>
<a name="l00557"></a>00557 <span class="comment">                          */</span>
<a name="l00558"></a>00558                         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*  <a class="code" href="eigen__plugins_8h.html#a7ee1e2b5233fb9717bf66fa1a43229a5" title="Read-only access to one element (Use with caution, bounds are not checked!)">get_unsafe</a>(
<a name="l00559"></a>00559                                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    col,
<a name="l00560"></a>00560                                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    row,
<a name="l00561"></a>00561                                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    channel=0) <span class="keyword">const</span>;
<a name="l00562"></a>00562 <span class="comment"></span>
<a name="l00563"></a>00563 <span class="comment">                        /** Returns the contents of a given pixel at the desired channel, in float format: [0,255]-&gt;[0,1]</span>
<a name="l00564"></a>00564 <span class="comment">                          *   The coordinate origin is pixel(0,0)=top-left corner of the image.</span>
<a name="l00565"></a>00565 <span class="comment">                          * \exception std::exception On pixel coordinates out of bounds</span>
<a name="l00566"></a>00566 <span class="comment">                          * \sa operator()</span>
<a name="l00567"></a>00567 <span class="comment">                          */</span>
<a name="l00568"></a>00568                         <span class="keywordtype">float</span>  getAsFloat(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> col, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> row, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel) <span class="keyword">const</span>;
<a name="l00569"></a>00569 <span class="comment"></span>
<a name="l00570"></a>00570 <span class="comment">                        /** Returns the contents of a given pixel (for gray-scale images, in color images the gray scale equivalent is computed for the pixel), in float format: [0,255]-&gt;[0,1]</span>
<a name="l00571"></a>00571 <span class="comment">                          *   The coordinate origin is pixel(0,0)=top-left corner of the image.</span>
<a name="l00572"></a>00572 <span class="comment">                          * \exception std::exception On pixel coordinates out of bounds</span>
<a name="l00573"></a>00573 <span class="comment">                          * \sa operator()</span>
<a name="l00574"></a>00574 <span class="comment">                          */</span>
<a name="l00575"></a>00575                         <span class="keywordtype">float</span>  getAsFloat(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> col, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> row) <span class="keyword">const</span>;
<a name="l00576"></a>00576 <span class="comment"></span>
<a name="l00577"></a>00577 <span class="comment">                        /** Returns a pointer to a given pixel information.</span>
<a name="l00578"></a>00578 <span class="comment">                         *   The coordinate origin is pixel(0,0)=top-left corner of the image.</span>
<a name="l00579"></a>00579 <span class="comment">                         * \exception std::exception On pixel coordinates out of bounds</span>
<a name="l00580"></a>00580 <span class="comment">                         */</span>
<a name="l00581"></a>00581                         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*  operator()(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> col, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> row, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> channel = 0) <span class="keyword">const</span>;
<a name="l00582"></a>00582 <span class="comment"></span>
<a name="l00583"></a>00583 <span class="comment">                        /** @} */</span>
<a name="l00584"></a>00584                         <span class="comment">// ================================================================</span>
<a name="l00585"></a>00585 
<a name="l00586"></a>00586 
<a name="l00587"></a>00587 
<a name="l00588"></a>00588                         <span class="comment">// ================================================================</span><span class="comment"></span>
<a name="l00589"></a>00589 <span class="comment">                        /** @name Query image properties</span>
<a name="l00590"></a>00590 <span class="comment">                            @{ */</span>
<a name="l00591"></a>00591 <span class="comment"></span>
<a name="l00592"></a>00592 <span class="comment">                        /** Returns the width of the image in pixels</span>
<a name="l00593"></a>00593 <span class="comment">                          * \sa getSize</span>
<a name="l00594"></a>00594 <span class="comment">                          */</span>
<a name="l00595"></a>00595                         <span class="keywordtype">size_t</span> getWidth() <span class="keyword">const</span>;
<a name="l00596"></a>00596 <span class="comment"></span>
<a name="l00597"></a>00597 <span class="comment">                        /** Returns the height of the image in pixels</span>
<a name="l00598"></a>00598 <span class="comment">                          * \sa getSize</span>
<a name="l00599"></a>00599 <span class="comment">                          */</span>
<a name="l00600"></a>00600                         <span class="keywordtype">size_t</span> getHeight() <span class="keyword">const</span>;
<a name="l00601"></a>00601 <span class="comment"></span>
<a name="l00602"></a>00602 <span class="comment">                        /** Return the size of the image</span>
<a name="l00603"></a>00603 <span class="comment">                          * \sa getWidth, getHeight</span>
<a name="l00604"></a>00604 <span class="comment">                          */</span>
<a name="l00605"></a>00605                         <span class="keywordtype">void</span> getSize(<a class="code" href="structmrpt_1_1utils_1_1_t_pixel_coord.html" title="A pair (x,y) of pixel coordinates (integer resolution).">TImageSize</a> &amp;s) <span class="keyword">const</span>;
<a name="l00606"></a>00606 <span class="comment"></span>
<a name="l00607"></a>00607 <span class="comment">                        /** Return the size of the image</span>
<a name="l00608"></a>00608 <span class="comment">                          * \sa getWidth, getHeight</span>
<a name="l00609"></a>00609 <span class="comment">                          */</span>
<a name="l00610"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a4f8e2244425e66957467cc00ddabde6f">00610</a>                         <span class="keyword">inline</span> <a class="code" href="structmrpt_1_1utils_1_1_t_pixel_coord.html" title="A pair (x,y) of pixel coordinates (integer resolution).">TImageSize</a> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a4f8e2244425e66957467cc00ddabde6f" title="Return the size of the image.">getSize</a>()<span class="keyword"> const </span>{
<a name="l00611"></a>00611                                 <a class="code" href="structmrpt_1_1utils_1_1_t_pixel_coord.html" title="A pair (x,y) of pixel coordinates (integer resolution).">TImageSize</a>  ret;
<a name="l00612"></a>00612                                 getSize(ret);
<a name="l00613"></a>00613                                 <span class="keywordflow">return</span> ret;
<a name="l00614"></a>00614                         }
<a name="l00615"></a>00615 <span class="comment"></span>
<a name="l00616"></a>00616 <span class="comment">                        /** Returns the row stride of the image: this is the number of *bytes* between two consecutive rows. You can access the pointer to the first row with get_unsafe(0,0)</span>
<a name="l00617"></a>00617 <span class="comment">                          * \sa getSize, get_unsafe</span>
<a name="l00618"></a>00618 <span class="comment">                          */</span>
<a name="l00619"></a>00619                         <span class="keywordtype">size_t</span> getRowStride() <span class="keyword">const</span>;
<a name="l00620"></a>00620 <span class="comment"></span>
<a name="l00621"></a>00621 <span class="comment">                        /** Return the maximum pixel value of the image, as a float value in the range [0,1]</span>
<a name="l00622"></a>00622 <span class="comment">                          * \sa getAsFloat</span>
<a name="l00623"></a>00623 <span class="comment">                          */</span>
<a name="l00624"></a>00624                         <span class="keywordtype">float</span>  getMaxAsFloat() <span class="keyword">const</span>;
<a name="l00625"></a>00625 <span class="comment"></span>
<a name="l00626"></a>00626 <span class="comment">                        /** Returns true if the image is RGB, false if it is grayscale */</span>
<a name="l00627"></a>00627                         <span class="keywordtype">bool</span>  isColor() <span class="keyword">const</span>;
<a name="l00628"></a>00628 <span class="comment"></span>
<a name="l00629"></a>00629 <span class="comment">                        /** Returns true if the coordinates origin is top-left, or false if it is bottom-left  */</span>
<a name="l00630"></a>00630                         <span class="keywordtype">bool</span>  isOriginTopLeft() <span class="keyword">const</span>;
<a name="l00631"></a>00631 <span class="comment"></span>
<a name="l00632"></a>00632 <span class="comment">                        /** Returns a string of the form &quot;BGR&quot;,&quot;RGB&quot; or &quot;GRAY&quot; indicating the channels ordering. \sa setChannelsOrder, swapRB */</span>
<a name="l00633"></a>00633                         <span class="keyword">const</span> <span class="keywordtype">char</span> *  getChannelsOrder()<span class="keyword">const</span>;
<a name="l00634"></a>00634 <span class="comment"></span>
<a name="l00635"></a>00635 <span class="comment">                        /** Marks the channel ordering in a color image as &quot;RGB&quot; (this doesn&#39;t actually modify the image data, just the format description) \sa getChannelsOrder, swapRB */</span>
<a name="l00636"></a>00636                         <span class="keywordtype">void</span> setChannelsOrder_RGB();<span class="comment"></span>
<a name="l00637"></a>00637 <span class="comment">                        /** Marks the channel ordering in a color image as &quot;BGR&quot; (this doesn&#39;t actually modify the image data, just the format description) \sa getChannelsOrder, swapRB */</span>
<a name="l00638"></a>00638                         <span class="keywordtype">void</span> setChannelsOrder_BGR();
<a name="l00639"></a>00639 <span class="comment"></span>
<a name="l00640"></a>00640 <span class="comment">                        /** Returns the number of channels, typically 1 (GRAY) or 3 (RGB)</span>
<a name="l00641"></a>00641 <span class="comment">                          * \sa isColor</span>
<a name="l00642"></a>00642 <span class="comment">                          */</span>
<a name="l00643"></a>00643                         <a class="code" href="namespacemrpt_1_1utils.html#a8669b520cea0ec8220809c77721f60eb" title="For use in mrpt::utils::CImage.">TImageChannels</a> getChannelCount() <span class="keyword">const</span>;
<a name="l00644"></a>00644 <span class="comment"></span>
<a name="l00645"></a>00645 <span class="comment">                        /**     Returns the image as a matrix with pixel grayscale values in the range [0,1]</span>
<a name="l00646"></a>00646 <span class="comment">                          *  \param doResize If set to true (default), the output matrix will be always the size of the image at output. If set to false, the matrix will be enlarged to the size of the image, but it will not be cropped if it has room enough (useful for FFT2D,...)</span>
<a name="l00647"></a>00647 <span class="comment">                          *  \param x_min The starting &quot;x&quot; coordinate to extract (default=0=the first column)</span>
<a name="l00648"></a>00648 <span class="comment">                          *  \param y_min The starting &quot;y&quot; coordinate to extract (default=0=the first row)</span>
<a name="l00649"></a>00649 <span class="comment">                          *  \param x_max The final &quot;x&quot; coordinate (inclusive) to extract (default=-1=the last column)</span>
<a name="l00650"></a>00650 <span class="comment">                          *  \param y_max The final &quot;y&quot; coordinate (inclusive) to extract (default=-1=the last row)</span>
<a name="l00651"></a>00651 <span class="comment">                          * \sa setFromMatrix</span>
<a name="l00652"></a>00652 <span class="comment">                          */</span>
<a name="l00653"></a>00653                         <span class="keywordtype">void</span>  getAsMatrix(
<a name="l00654"></a>00654                                 <a class="code" href="classmrpt_1_1math_1_1_c_matrix_template_numeric.html" title="A matrix of dynamic size.">mrpt::math::CMatrixFloat</a>        &amp;outMatrix,
<a name="l00655"></a>00655                                 <span class="keywordtype">bool</span>            doResize = <span class="keyword">true</span>,
<a name="l00656"></a>00656                                 <span class="keywordtype">int</span>                     x_min = 0,
<a name="l00657"></a>00657                                 <span class="keywordtype">int</span>                     y_min = 0,
<a name="l00658"></a>00658                                 <span class="keywordtype">int</span>                     x_max = -1,
<a name="l00659"></a>00659                                 <span class="keywordtype">int</span>                     y_max = -1
<a name="l00660"></a>00660                                 )  <span class="keyword">const</span>;
<a name="l00661"></a>00661 <span class="comment"></span>
<a name="l00662"></a>00662 <span class="comment">                        /**     Returns the image as a matrix, where the image is &quot;tiled&quot; (repeated) the required number of times to fill the entire size of the matrix on input.</span>
<a name="l00663"></a>00663 <span class="comment">                          */</span>
<a name="l00664"></a>00664                         <span class="keywordtype">void</span>  getAsMatrixTiled( <a class="code" href="classmrpt_1_1math_1_1_c_matrix.html" title="This class is a &quot;CSerializable&quot; wrapper for &quot;CMatrixFloat&quot;.">math::CMatrix</a> &amp;outMatrix )  <span class="keyword">const</span>;
<a name="l00665"></a>00665 <span class="comment"></span>
<a name="l00666"></a>00666 <span class="comment">                        /** @} */</span>
<a name="l00667"></a>00667                         <span class="comment">// ================================================================</span>
<a name="l00668"></a>00668 
<a name="l00669"></a>00669 
<a name="l00670"></a>00670                         <span class="comment">// ================================================================</span><span class="comment"></span>
<a name="l00671"></a>00671 <span class="comment">                        /** @name External storage-mode methods</span>
<a name="l00672"></a>00672 <span class="comment">                            @{  */</span>
<a name="l00673"></a>00673 <span class="comment"></span>
<a name="l00674"></a>00674 <span class="comment">                        /**  By using this method the image is marked as referenced to an external file, which will be loaded only under demand.</span>
<a name="l00675"></a>00675 <span class="comment">                          *   A CImage with external storage does not consume memory until some method trying to access the image is invoked (e.g. getWidth(), isColor(),...)</span>
<a name="l00676"></a>00676 <span class="comment">                          *   At any moment, the image can be unloaded from memory again by invoking unload.</span>
<a name="l00677"></a>00677 <span class="comment">                          *   An image becomes of type &quot;external storage&quot; only through calling setExternalStorage. This property remains after serializing the object.</span>
<a name="l00678"></a>00678 <span class="comment">                          *   File names can be absolute, or relative to the CImage::IMAGES_PATH_BASE directory. Filenames staring with &quot;X:\&quot; or &quot;/&quot; are considered absolute paths.</span>
<a name="l00679"></a>00679 <span class="comment">                          *   By calling this method the current contents of the image are NOT saved to that file, because this method can be also called</span>
<a name="l00680"></a>00680 <span class="comment">                          *    to let the object know where to load the image in case its contents are required. Thus, for saving images in this format (not when loading)</span>
<a name="l00681"></a>00681 <span class="comment">                          *    the proper order of commands should be:</span>
<a name="l00682"></a>00682 <span class="comment">                          *   \code</span>
<a name="l00683"></a>00683 <span class="comment">                          *   img.saveToFile( fileName );</span>
<a name="l00684"></a>00684 <span class="comment">                          *   img.setExternalStorage( fileName );</span>
<a name="l00685"></a>00685 <span class="comment">                          *   \endcode</span>
<a name="l00686"></a>00686 <span class="comment">                          *</span>
<a name="l00687"></a>00687 <span class="comment">                          *   \note Modifications to the memory copy of the image are not automatically saved to disk.</span>
<a name="l00688"></a>00688 <span class="comment">                          *  \sa unload, isExternallyStored</span>
<a name="l00689"></a>00689 <span class="comment">                          */</span>
<a name="l00690"></a>00690                         <span class="keywordtype">void</span> setExternalStorage( <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;fileName ) <a class="code" href="mrpt__macros_8h.html#afed971bfd24ff010f488cce2aa424de4" title="Used after member declarations.">MRPT_NO_THROWS</a>;
<a name="l00691"></a>00691 
<a name="l00692"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a792b99c4b209b5516febb67ad1ae3b34">00692</a>                         <span class="keyword">static</span> std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a792b99c4b209b5516febb67ad1ae3b34" title="By default, &quot;.&quot;.">IMAGES_PATH_BASE</a>;            <span class="comment">//!&lt; By default, &quot;.&quot;  \sa setExternalStorage</span>
<a name="l00693"></a>00693 <span class="comment"></span><span class="comment"></span>
<a name="l00694"></a>00694 <span class="comment">                        /** See setExternalStorage(). */</span>
<a name="l00695"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a6675e91f9d52059beeeb3907718bd66c">00695</a>                         <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a6675e91f9d52059beeeb3907718bd66c" title="See setExternalStorage().">isExternallyStored</a>() const MRPT_NO_THROWS { <span class="keywordflow">return</span> m_imgIsExternalStorage; }
<a name="l00696"></a>00696 
<a name="l00697"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a30a5d823f159b04814bf3c7c75fe2101">00697</a>                         <span class="keyword">inline</span> std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a>  getExternalStorageFile() const MRPT_NO_THROWS <span class="comment">//!&lt; Only if isExternallyStored() returns true. \sa getExternalStorageFileAbsolutePath</span>
<a name="l00698"></a>00698 <span class="comment"></span>                        {
<a name="l00699"></a>00699                                 <span class="keywordflow">return</span> m_externalFile;
<a name="l00700"></a>00700                         }
<a name="l00701"></a>00701 <span class="comment"></span>
<a name="l00702"></a>00702 <span class="comment">                        /** Only if isExternallyStored() returns true. \sa getExternalStorageFile */</span>
<a name="l00703"></a>00703                         <span class="keywordtype">void</span> getExternalStorageFileAbsolutePath(<a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;out_path) <span class="keyword">const</span>;
<a name="l00704"></a>00704 <span class="comment"></span>
<a name="l00705"></a>00705 <span class="comment">                        /** Only if isExternallyStored() returns true. \sa getExternalStorageFile */</span>
<a name="l00706"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#aba8221e3e52ad5b6453d394f41f034a5">00706</a>                         <span class="keyword">inline</span> std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#aba8221e3e52ad5b6453d394f41f034a5" title="Only if isExternallyStored() returns true.">getExternalStorageFileAbsolutePath</a>()<span class="keyword"> const </span>{
<a name="l00707"></a>00707                                         std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a> tmp;
<a name="l00708"></a>00708                                         getExternalStorageFileAbsolutePath(tmp);
<a name="l00709"></a>00709                                         <span class="keywordflow">return</span> tmp;
<a name="l00710"></a>00710                         }
<a name="l00711"></a>00711 <span class="comment"></span>
<a name="l00712"></a>00712 <span class="comment">                        /** For external storage image objects only, this method makes sure the image is loaded in memory. Note that usually images are loaded on-the-fly on first access and there&#39;s no need to call this.</span>
<a name="l00713"></a>00713 <span class="comment">                          * \unload</span>
<a name="l00714"></a>00714 <span class="comment">                          */</span>
<a name="l00715"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a1c803e601870239da6c61526bc141735">00715</a>                         <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a1c803e601870239da6c61526bc141735" title="For external storage image objects only, this method makes sure the image is loaded in memory...">forceLoad</a>() {  makeSureImageIsLoaded(); }
<a name="l00716"></a>00716 <span class="comment"></span>
<a name="l00717"></a>00717 <span class="comment">                        /** For external storage image objects only, this method unloads the image from memory (or does nothing if already unloaded).</span>
<a name="l00718"></a>00718 <span class="comment">                          *  It does not need to be called explicitly, unless the user wants to save memory for images that will not be used often.</span>
<a name="l00719"></a>00719 <span class="comment">                          *  If called for an image without the flag &quot;external storage&quot;, it is simply ignored.</span>
<a name="l00720"></a>00720 <span class="comment">                          * \sa setExternalStorage, forceLoad</span>
<a name="l00721"></a>00721 <span class="comment">                          */</span>
<a name="l00722"></a>00722                         <span class="keywordtype">void</span> unload() MRPT_NO_THROWS;
<a name="l00723"></a>00723 <span class="comment"></span>
<a name="l00724"></a>00724 <span class="comment">                        /** @}  */</span>
<a name="l00725"></a>00725                         <span class="comment">// ================================================================</span>
<a name="l00726"></a>00726 
<a name="l00727"></a>00727 
<a name="l00728"></a>00728                         <span class="comment">// ================================================================</span><span class="comment"></span>
<a name="l00729"></a>00729 <span class="comment">                        /** @name Set, load &amp; save methods</span>
<a name="l00730"></a>00730 <span class="comment">                            @{  */</span>
<a name="l00731"></a>00731 <span class="comment"></span>
<a name="l00732"></a>00732 <span class="comment">                        /** Reads the image from raw pixels buffer in memory.</span>
<a name="l00733"></a>00733 <span class="comment">                          */</span>
<a name="l00734"></a>00734                         <span class="keywordtype">void</span>  loadFromMemoryBuffer( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height, <span class="keywordtype">bool</span> color, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *rawpixels, <span class="keywordtype">bool</span> swapRedBlue = false );
<a name="l00735"></a>00735 <span class="comment"></span>
<a name="l00736"></a>00736 <span class="comment">                        /** Reads a color image from three raw pixels buffers in memory.</span>
<a name="l00737"></a>00737 <span class="comment">                          * bytesPerRow is the number of bytes per row per channel, i.e. the row increment.</span>
<a name="l00738"></a>00738 <span class="comment">                          */</span>
<a name="l00739"></a>00739                         <span class="keywordtype">void</span>  loadFromMemoryBuffer( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> height, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bytesPerRow, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *red, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *green, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *blue );
<a name="l00740"></a>00740 <span class="comment"></span>
<a name="l00741"></a>00741 <span class="comment">                        /** Reads the image from a OpenCV IplImage object (making a COPY).</span>
<a name="l00742"></a>00742 <span class="comment">                          */</span>
<a name="l00743"></a>00743                         <span class="keywordtype">void</span>  loadFromIplImage( <span class="keywordtype">void</span>* iplImage );
<a name="l00744"></a>00744 <span class="comment"></span>
<a name="l00745"></a>00745 <span class="comment">                        /** Reads the image from a OpenCV IplImage object (WITHOUT making a copy).</span>
<a name="l00746"></a>00746 <span class="comment">                          *   This object will own the memory of the passed object and free the IplImage upon destruction,</span>
<a name="l00747"></a>00747 <span class="comment">                          *     so the caller CAN&#39;T free the original object.</span>
<a name="l00748"></a>00748 <span class="comment">                          *   This method provides a fast method to grab images from a camera without making a copy of every frame.</span>
<a name="l00749"></a>00749 <span class="comment">                          */</span>
<a name="l00750"></a>00750                         <span class="keywordtype">void</span>  setFromIplImage( <span class="keywordtype">void</span>* iplImage );
<a name="l00751"></a>00751 <span class="comment"></span>
<a name="l00752"></a>00752 <span class="comment">                        /** Reads the image from a OpenCV IplImage object (WITHOUT making a copy) and from now on the image cannot be modified, just read.</span>
<a name="l00753"></a>00753 <span class="comment">                          *  When assigning an IPLImage to this object with this method, the IPLImage will NOT be released/freed at this object destructor.</span>
<a name="l00754"></a>00754 <span class="comment">                          *   This method provides a fast method to grab images from a camera without making a copy of every frame.</span>
<a name="l00755"></a>00755 <span class="comment">                          *  \sa setFromImageReadOnly</span>
<a name="l00756"></a>00756 <span class="comment">                          */</span>
<a name="l00757"></a>00757                         <span class="keywordtype">void</span>  setFromIplImageReadOnly( <span class="keywordtype">void</span>* iplImage );
<a name="l00758"></a>00758 <span class="comment"></span>
<a name="l00759"></a>00759 <span class="comment">                        /** Sets the internal IplImage pointer to that of another given image, WITHOUT making a copy, and from now on the image cannot be modified in this object (it will be neither freed, so the memory responsibility will still be of the original image object).</span>
<a name="l00760"></a>00760 <span class="comment">                          *  When assigning an IPLImage to this object with this method, the IPLImage will NOT be released/freed at this object destructor.</span>
<a name="l00761"></a>00761 <span class="comment">                          *  \sa setFromIplImageReadOnly</span>
<a name="l00762"></a>00762 <span class="comment">                          */</span>
<a name="l00763"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#aeadbe9b94550d1378e19f6510f7e788c">00763</a>                         inline <span class="keywordtype">void</span> setFromImageReadOnly( const <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &amp;other_img ) { setFromIplImageReadOnly(other_img.getAsIplImage() ); }
<a name="l00764"></a>00764 <span class="comment"></span>
<a name="l00765"></a>00765 <span class="comment">                        /** Set the image from a matrix, interpreted as grayscale intensity values, in the range [0,1] (normalized=true) or [0,255] (normalized=false)</span>
<a name="l00766"></a>00766 <span class="comment">                          * \sa getAsMatrix</span>
<a name="l00767"></a>00767 <span class="comment">                          */</span>
<a name="l00768"></a>00768                         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Derived&gt;
<a name="l00769"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a7e44d9399f9ec03ca9cdf7cdde833c6b">00769</a>                         <span class="keywordtype">void</span> setFromMatrix(<span class="keyword">const</span> <a class="code" href="class_eigen_1_1_matrix_base.html">Eigen::MatrixBase&lt;Derived&gt;</a> &amp;m, <span class="keywordtype">bool</span> matrix_is_normalized=<span class="keyword">true</span>)
<a name="l00770"></a>00770                         {
<a name="l00771"></a>00771                                 <a class="code" href="mrpt__macros_8h.html#a45b840af519f33816311acdbb28d7c10">MRPT_START</a>
<a name="l00772"></a>00772                                 makeSureImageIsLoaded();   <span class="comment">// For delayed loaded images stored externally</span>
<a name="l00773"></a>00773                                 <a class="code" href="mrpt__macros_8h.html#a47eb5a445c2bf3d9190396510ea9683e">ASSERT_</a>(img)
<a name="l00774"></a>00774                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lx = m.cols();
<a name="l00775"></a>00775                                 <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ly = m.rows();
<a name="l00776"></a>00776                                 this-&gt;changeSize(lx,ly,1,<span class="keyword">true</span>);
<a name="l00777"></a>00777                                 <span class="keywordflow">if</span> (matrix_is_normalized) {  <span class="comment">// Matrix: [0,1]</span>
<a name="l00778"></a>00778                                         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y=0;y&lt;ly;y++) {
<a name="l00779"></a>00779                                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *pixels = this-&gt;<a class="code" href="eigen__plugins_8h.html#a7ee1e2b5233fb9717bf66fa1a43229a5" title="Read-only access to one element (Use with caution, bounds are not checked!)">get_unsafe</a>(0,y,0);
<a name="l00780"></a>00780                                                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x=0;x&lt;lx;x++)
<a name="l00781"></a>00781                                                         (*pixels++) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">&gt;</span>( m.<a class="code" href="class_eigen_1_1_matrix_base.html#a54005be2412d2d4fdde576d882488828" title="Read-only access to one element (Use with caution, bounds are not checked!)">get_unsafe</a>(y,x) * 255 );
<a name="l00782"></a>00782                                         }
<a name="l00783"></a>00783                                 }
<a name="l00784"></a>00784                                 <span class="keywordflow">else</span> {  <span class="comment">// Matrix: [0,255]</span>
<a name="l00785"></a>00785                                         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> y=0;y&lt;ly;y++) {
<a name="l00786"></a>00786                                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *pixels = this-&gt;<a class="code" href="eigen__plugins_8h.html#a7ee1e2b5233fb9717bf66fa1a43229a5" title="Read-only access to one element (Use with caution, bounds are not checked!)">get_unsafe</a>(0,y,0);
<a name="l00787"></a>00787                                                 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> x=0;x&lt;lx;x++)
<a name="l00788"></a>00788                                                         (*pixels++) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">&gt;</span>( m.<a class="code" href="class_eigen_1_1_matrix_base.html#a54005be2412d2d4fdde576d882488828" title="Read-only access to one element (Use with caution, bounds are not checked!)">get_unsafe</a>(y,x) );
<a name="l00789"></a>00789                                         }
<a name="l00790"></a>00790                                 }
<a name="l00791"></a>00791                                 <a class="code" href="mrpt__macros_8h.html#a88a917260793b56abd83ad2a0d849eb1">MRPT_END</a>
<a name="l00792"></a>00792                         }
<a name="l00793"></a>00793 <span class="comment"></span>
<a name="l00794"></a>00794 <span class="comment">                        /** Reads the image from a binary stream containing a binary jpeg file.</span>
<a name="l00795"></a>00795 <span class="comment">                         * \exception std::exception On pixel coordinates out of bounds</span>
<a name="l00796"></a>00796 <span class="comment">                          */</span>
<a name="l00797"></a>00797                         <span class="keywordtype">void</span>  loadFromStreamAsJPEG( <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a> &amp;in );
<a name="l00798"></a>00798 <span class="comment"></span>
<a name="l00799"></a>00799 <span class="comment">                        /** Load image from a file, whose format is determined from the extension (internally uses OpenCV).</span>
<a name="l00800"></a>00800 <span class="comment">                         * \param fileName The file to read from.</span>
<a name="l00801"></a>00801 <span class="comment">                         * \param isColor Specifies colorness of the loaded image:</span>
<a name="l00802"></a>00802 <span class="comment">                         *  - if &gt;0, the loaded image is forced to be color 3-channel image;</span>
<a name="l00803"></a>00803 <span class="comment">                         *  - if 0, the loaded image is forced to be grayscale;</span>
<a name="l00804"></a>00804 <span class="comment">                         *  - if &lt;0, the loaded image will be loaded as is (with number of channels depends on the file).</span>
<a name="l00805"></a>00805 <span class="comment">                         * The supported formats are:</span>
<a name="l00806"></a>00806 <span class="comment">                         *</span>
<a name="l00807"></a>00807 <span class="comment">                         * - Windows bitmaps - BMP, DIB;</span>
<a name="l00808"></a>00808 <span class="comment">                         * - JPEG files - JPEG, JPG, JPE;</span>
<a name="l00809"></a>00809 <span class="comment">                         * - Portable Network Graphics - PNG;</span>
<a name="l00810"></a>00810 <span class="comment">                         * - Portable image format - PBM, PGM, PPM;</span>
<a name="l00811"></a>00811 <span class="comment">                         * - Sun rasters - SR, RAS;</span>
<a name="l00812"></a>00812 <span class="comment">                         * - TIFF files - TIFF, TIF.</span>
<a name="l00813"></a>00813 <span class="comment">                         *</span>
<a name="l00814"></a>00814 <span class="comment">                         * \return False on any error</span>
<a name="l00815"></a>00815 <span class="comment">                         * \sa saveToFile, setExternalStorage</span>
<a name="l00816"></a>00816 <span class="comment">                         */</span>
<a name="l00817"></a>00817                         <span class="keywordtype">bool</span>  loadFromFile( <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a>&amp; fileName, <span class="keywordtype">int</span> isColor = -1  );
<a name="l00818"></a>00818 <span class="comment"></span>
<a name="l00819"></a>00819 <span class="comment">                        /** Save the image to a file, whose format is determined from the extension (internally uses OpenCV).</span>
<a name="l00820"></a>00820 <span class="comment">                         * \param fileName The file to write to.</span>
<a name="l00821"></a>00821 <span class="comment">                         *</span>
<a name="l00822"></a>00822 <span class="comment">                         * The supported formats are:</span>
<a name="l00823"></a>00823 <span class="comment">                         *</span>
<a name="l00824"></a>00824 <span class="comment">                         * - Windows bitmaps - BMP, DIB;</span>
<a name="l00825"></a>00825 <span class="comment">                         * - JPEG files - JPEG, JPG, JPE;</span>
<a name="l00826"></a>00826 <span class="comment">                         * - Portable Network Graphics - PNG;</span>
<a name="l00827"></a>00827 <span class="comment">                         * - Portable image format - PBM, PGM, PPM;</span>
<a name="l00828"></a>00828 <span class="comment">                         * - Sun rasters - SR, RAS;</span>
<a name="l00829"></a>00829 <span class="comment">                         * - TIFF files - TIFF, TIF.</span>
<a name="l00830"></a>00830 <span class="comment">                         *</span>
<a name="l00831"></a>00831 <span class="comment">                         * \param jpeg_quality Only for JPEG files, the quality of the compression in the range [0-100]. Larger is better quality but slower.</span>
<a name="l00832"></a>00832 <span class="comment">                         * \note jpeg_quality is only effective if MRPT is compiled against OpenCV 1.1.0 or newer.</span>
<a name="l00833"></a>00833 <span class="comment">                         * \return False on any error</span>
<a name="l00834"></a>00834 <span class="comment">                         * \sa loadFromFile</span>
<a name="l00835"></a>00835 <span class="comment">                         */</span>
<a name="l00836"></a>00836                         <span class="keywordtype">bool</span>  saveToFile( <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a>&amp; fileName, <span class="keywordtype">int</span> jpeg_quality = 95 ) <span class="keyword">const</span>;
<a name="l00837"></a>00837 <span class="comment"></span>
<a name="l00838"></a>00838 <span class="comment">                        /** Save image to binary stream as a JPEG (.jpg) compresed format.</span>
<a name="l00839"></a>00839 <span class="comment">                         * \exception std::exception On number of rows or cols equal to zero, or other errors.</span>
<a name="l00840"></a>00840 <span class="comment">                         * \sa saveToJPEG</span>
<a name="l00841"></a>00841 <span class="comment">                         */</span>
<a name="l00842"></a>00842                         <span class="keywordtype">void</span>  saveToStreamAsJPEG( <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>               &amp;out  )<span class="keyword">const</span>;
<a name="l00843"></a>00843 <span class="comment"></span>
<a name="l00844"></a>00844 <span class="comment">                        /** @}  */</span>
<a name="l00845"></a>00845                         <span class="comment">// ================================================================</span>
<a name="l00846"></a>00846 
<a name="l00847"></a>00847 
<a name="l00848"></a>00848                         <span class="comment">// ================================================================</span><span class="comment"></span>
<a name="l00849"></a>00849 <span class="comment">                        /** @name Color/Grayscale conversion</span>
<a name="l00850"></a>00850 <span class="comment">                            @{ */</span>
<a name="l00851"></a>00851 <span class="comment"></span>
<a name="l00852"></a>00852 <span class="comment">                        /** Returns a grayscale version of the image, or itself if it is already a grayscale image.</span>
<a name="l00853"></a>00853 <span class="comment">                          */</span>
<a name="l00854"></a>00854                         <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>  grayscale() <span class="keyword">const</span>;
<a name="l00855"></a>00855 <span class="comment"></span>
<a name="l00856"></a>00856 <span class="comment">                        /** Returns a grayscale version of the image, or itself if it is already a grayscale image.</span>
<a name="l00857"></a>00857 <span class="comment">                          * \sa colorImage</span>
<a name="l00858"></a>00858 <span class="comment">                          */</span>
<a name="l00859"></a>00859                         <span class="keywordtype">void</span> grayscale( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>  &amp;ret ) <span class="keyword">const</span>;
<a name="l00860"></a>00860 <span class="comment"></span>
<a name="l00861"></a>00861 <span class="comment">                        /** Returns a RGB version of the grayscale image, or itself if it is already a RGB image.</span>
<a name="l00862"></a>00862 <span class="comment">                          * \sa grayscale</span>
<a name="l00863"></a>00863 <span class="comment">                          */</span>
<a name="l00864"></a>00864                         <span class="keywordtype">void</span> colorImage( <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>  &amp;ret ) <span class="keyword">const</span>;
<a name="l00865"></a>00865 <span class="comment"></span>
<a name="l00866"></a>00866 <span class="comment">                        /** Replaces this grayscale image with a RGB version of it.</span>
<a name="l00867"></a>00867 <span class="comment">                          * \sa grayscaleInPlace</span>
<a name="l00868"></a>00868 <span class="comment">                          */</span>
<a name="l00869"></a>00869                         <span class="keywordtype">void</span> colorImageInPlace();
<a name="l00870"></a>00870 
<a name="l00871"></a>00871 <span class="comment"></span>
<a name="l00872"></a>00872 <span class="comment">                        /** Replaces the image with a grayscale version of it.</span>
<a name="l00873"></a>00873 <span class="comment">                          * \sa colorImageInPlace</span>
<a name="l00874"></a>00874 <span class="comment">                          */</span>
<a name="l00875"></a>00875                         <span class="keywordtype">void</span> grayscaleInPlace();
<a name="l00876"></a>00876 <span class="comment"></span>
<a name="l00877"></a>00877 <span class="comment">                        /** @} */</span>
<a name="l00878"></a>00878                         <span class="comment">// ================================================================</span>
<a name="l00879"></a>00879 
<a name="l00880"></a>00880 
<a name="l00881"></a>00881                 <span class="keyword">protected</span>:<span class="comment"></span>
<a name="l00882"></a>00882 <span class="comment">                        /** @name Data members</span>
<a name="l00883"></a>00883 <span class="comment">                                @{ */</span>
<a name="l00884"></a>00884 
<a name="l00885"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a35ed32bed738be526c2152acc3e64164">00885</a>                         <span class="keywordtype">void</span>    *<a class="code" href="classmrpt_1_1utils_1_1_c_image.html#a35ed32bed738be526c2152acc3e64164" title="The internal IplImage pointer to the actual image content.">img</a>;  <span class="comment">//!&lt; The internal IplImage pointer to the actual image content.</span>
<a name="l00886"></a>00886 <span class="comment"></span><span class="comment"></span>
<a name="l00887"></a>00887 <span class="comment">                        /**  Set to true only when using setFromIplImageReadOnly.</span>
<a name="l00888"></a>00888 <span class="comment">                          * \sa setFromIplImageReadOnly  */</span>
<a name="l00889"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ab25223a74268999b4b9d6a4594d20c34">00889</a>                         <span class="keywordtype">bool</span>    <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ab25223a74268999b4b9d6a4594d20c34" title="Set to true only when using setFromIplImageReadOnly.">m_imgIsReadOnly</a>;<span class="comment"></span>
<a name="l00890"></a>00890 <span class="comment">                        /**  Set to true only when using setExternalStorage.</span>
<a name="l00891"></a>00891 <span class="comment">                          * \sa setExternalStorage</span>
<a name="l00892"></a>00892 <span class="comment">                          */</span>
<a name="l00893"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#af3dbc7d29f50c5ca287c35f244f5ffe3">00893</a>                         <span class="keyword">mutable</span> <span class="keywordtype">bool</span>    <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#af3dbc7d29f50c5ca287c35f244f5ffe3" title="Set to true only when using setExternalStorage.">m_imgIsExternalStorage</a>;
<a name="l00894"></a><a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ae621098c3369678aa53d99a9cd79f22f">00894</a>                         <span class="keyword">mutable</span> std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a>     <a class="code" href="classmrpt_1_1utils_1_1_c_image.html#ae621098c3369678aa53d99a9cd79f22f" title="The file name of a external storage image.">m_externalFile</a>;         <span class="comment">//!&lt; The file name of a external storage image.</span>
<a name="l00895"></a>00895 <span class="comment"></span><span class="comment"></span>
<a name="l00896"></a>00896 <span class="comment">                        /** @} */</span>
<a name="l00897"></a>00897 <span class="comment"></span>
<a name="l00898"></a>00898 <span class="comment">                        /**  Resize the buffers in &quot;img&quot; to accomodate a new image size and/or format.</span>
<a name="l00899"></a>00899 <span class="comment">                          */</span>
<a name="l00900"></a>00900                         <span class="keywordtype">void</span>  changeSize(
<a name="l00901"></a>00901                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    width,
<a name="l00902"></a>00902                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>    height,
<a name="l00903"></a>00903                                         <a class="code" href="namespacemrpt_1_1utils.html#a8669b520cea0ec8220809c77721f60eb" title="For use in mrpt::utils::CImage.">TImageChannels</a>  nChannels,
<a name="l00904"></a>00904                                         <span class="keywordtype">bool</span>                    originTopLeft );
<a name="l00905"></a>00905 <span class="comment"></span>
<a name="l00906"></a>00906 <span class="comment">                        /** Release the internal IPL image, if not NULL or read-only. */</span>
<a name="l00907"></a>00907                         <span class="keywordtype">void</span> releaseIpl(<span class="keywordtype">bool</span> thisIsExternalImgUnload = <span class="keyword">false</span>) MRPT_NO_THROWS;
<a name="l00908"></a>00908 <span class="comment"></span>
<a name="l00909"></a>00909 <span class="comment">                        /** Checks if the image is of type &quot;external storage&quot;, and if so and not loaded yet, load it. */</span>
<a name="l00910"></a>00910                         <span class="keywordtype">void</span> makeSureImageIsLoaded() const throw (std::<a class="code" href="classstd_1_1exception.html" title="STL class.">exception</a>,utils::<a class="code" href="classmrpt_1_1utils_1_1_c_exception_external_image_not_found.html" title="Used in mrpt::utils::CImage.">CExceptionExternalImageNotFound</a> );
<a name="l00911"></a>00911 
<a name="l00912"></a>00912                 }; <span class="comment">// End of class</span>
<a name="l00913"></a>00913 
<a name="l00914"></a><a class="code" href="namespacemrpt_1_1utils.html#a851f869238d6384e20d7428ce37f51ee">00914</a>                 typedef <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CMRPTImage</a>;      <span class="comment">//!&lt; Deprecated name.</span>
<a name="l00915"></a>00915 <span class="comment"></span>
<a name="l00916"></a>00916 
<a name="l00917"></a>00917         } <span class="comment">// end of namespace utils</span>
<a name="l00918"></a>00918 
<a name="l00919"></a>00919 } <span class="comment">// end of namespace mrpt</span>
<a name="l00920"></a>00920 
<a name="l00921"></a>00921 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150">  </td></tr> </table>  </body></html>