117 CImage(
unsigned int width,
119 TImageChannels nChannels =
CH_RGB,
120 bool originTopLeft = true
124 CImage( const CImage &o );
150 else this->setFromImageReadOnly(other_img);
161 template <
typename Derived>
162 explicit inline CImage(
const Eigen::MatrixBase<Derived> &m,
bool matrix_is_normalized) : img(NULL),m_imgIsReadOnly(false), m_imgIsExternalStorage(false)
164 this->setFromMatrix(m,matrix_is_normalized);
203 TImageChannels nChannels,
206 changeSize(width,height,nChannels,originTopLeft);
222 void rotateImage(
double angle_radians,
unsigned int center_x,
unsigned int center_y,
double scale = 1.0 );
231 void setPixel(
int x,
int y,
size_t color);
235 void setOriginTopLeft(
bool val);
252 unsigned int width = 1,
253 TPenStyle penStyle = psSolid);
267 unsigned int width = 1);
269 void equalizeHistInPlace();
270 void equalizeHist(
CImage &outImg )
const;
279 this->scaleHalf(ret);
284 void scaleHalf(
CImage &out_image)
const;
294 this->scaleHalfSmooth(ret);
299 void scaleHalfSmooth(
CImage &out_image)
const;
309 this->scaleDouble(ret);
314 void scaleDouble(
CImage &out_image)
const;
323 void update_patch(
const CImage &patch,
324 const unsigned int col,
325 const unsigned int row);
333 const unsigned int col=0,
334 const unsigned int row=0,
335 const unsigned int width=1,
336 const unsigned int height=1 )
const;
343 float correlate(
const CImage &img2int,
int width_init=0,
int height_init=0 )
const;
359 void cross_correlation(
366 int u_search_size=-1,
367 int v_search_size=-1,
368 CImage *out_corr_image = NULL
390 int u_search_size=-1,
391 int v_search_size=-1,
392 float biasThisImg = 0,
406 void flipVertical(
bool also_swapRB =
false);
430 void rectifyImageInPlace(
void *mapX,
void *mapY );
433 void filterMedian(
CImage &out_img,
int W=3 )
const;
436 void filterMedianInPlace(
int W=3 );
439 void filterGaussianInPlace(
int W = 3,
int H = 3 );
442 void filterGaussian(
CImage &out_img,
int W = 3,
int H = 3)
const;
454 bool drawChessboardCorners(
455 std::vector<TPixelCoordf> &cornerCoords,
456 unsigned int check_size_x,
457 unsigned int check_size_y,
458 unsigned int lines_width = 1,
459 unsigned int circles_radius = 4
476 const unsigned int x,
477 const unsigned int y,
478 const unsigned int half_window_size )
const;
498 void copyFromForceLoad(
const CImage &o);
503 void copyFastFrom(
CImage &o );
516 template <
typename T>
inline const T*
getAs()
const {
517 makeSureImageIsLoaded();
518 return static_cast<const T*
>(img);
521 template <
typename T>
inline T*
getAs(){
522 makeSureImageIsLoaded();
523 return static_cast<T*
>(img);
532 unsigned int channel=0)
const;
539 float getAsFloat(
unsigned int col,
unsigned int row,
unsigned int channel)
const;
546 float getAsFloat(
unsigned int col,
unsigned int row)
const;
552 unsigned char* operator()(
unsigned int col,
unsigned int row,
unsigned int channel = 0)
const;
566 size_t getWidth()
const;
571 size_t getHeight()
const;
590 size_t getRowStride()
const;
595 float getMaxAsFloat()
const;
598 bool isColor()
const;
601 bool isOriginTopLeft()
const;
604 const char * getChannelsOrder()
const;
607 void setChannelsOrder_RGB();
609 void setChannelsOrder_BGR();
614 TImageChannels getChannelCount()
const;
626 bool doResize =
true,
641 void getAsRGBMatrices(
645 bool doResize =
true,
680 void setExternalStorage(
const std::string &fileName )
MRPT_NO_THROWS;
689 return m_externalFile;
693 void getExternalStorageFileAbsolutePath(std::string &out_path)
const;
698 getExternalStorageFileAbsolutePath(tmp);
705 inline void forceLoad()
const { makeSureImageIsLoaded(); }
712 void unload() const MRPT_NO_THROWS;
724 void loadFromMemoryBuffer(
unsigned int width,
unsigned int height,
bool color,
unsigned char *rawpixels,
bool swapRedBlue = false );
729 void loadFromMemoryBuffer(
unsigned int width,
unsigned int height,
unsigned int bytesPerRow,
unsigned char *red,
unsigned char *green,
unsigned char *blue );
733 void loadFromIplImage(
void* iplImage );
740 void setFromIplImage(
void* iplImage );
747 void setFromIplImageReadOnly(
void* iplImage );
753 inline
void setFromImageReadOnly( const
CImage &other_img ) { setFromIplImageReadOnly(const_cast<void*>(other_img.getAs<
void>()) ); }
759 template <
typename Derived>
760 void setFromMatrix(
const Eigen::MatrixBase<Derived> &m,
bool matrix_is_normalized=
true)
763 const unsigned int lx = m.cols();
764 const unsigned int ly = m.rows();
765 this->changeSize(lx,ly,1,
true);
766 if (matrix_is_normalized) {
767 for (
unsigned int y=0;y<ly;y++) {
768 unsigned char *pixels = this->
get_unsafe(0,y,0);
769 for (
unsigned int x=0;x<lx;x++)
770 (*pixels++) =
static_cast<unsigned char>( m.get_unsafe(y,x) * 255 );
774 for (
unsigned int y=0;y<ly;y++) {
775 unsigned char *pixels = this->
get_unsafe(0,y,0);
776 for (
unsigned int x=0;x<lx;x++)
777 (*pixels++) =
static_cast<unsigned char>( m.get_unsafe(y,x) );
787 template <
typename Derived>
788 void setFromRGBMatrices(
const Eigen::MatrixBase<Derived> &m_r,
const Eigen::MatrixBase<Derived> &m_g,
const Eigen::MatrixBase<Derived> &m_b,
bool matrix_is_normalized=
true)
791 makeSureImageIsLoaded();
793 ASSERT_((m_r.size() == m_g.size())&&(m_r.size() == m_b.size()));
794 const unsigned int lx = m_r.cols();
795 const unsigned int ly = m_r.rows();
796 this->changeSize(lx,ly,3,
true);
797 this->setChannelsOrder_RGB();
799 if (matrix_is_normalized) {
800 for (
unsigned int y=0;y<ly;y++) {
801 unsigned char *pixels = this->
get_unsafe(0,y,0);
802 for (
unsigned int x=0;x<lx;x++)
804 (*pixels++) = static_cast<unsigned char>( m_r.get_unsafe(y,x) * 255 );
805 (*pixels++) = static_cast<unsigned char>( m_g.get_unsafe(y,x) * 255 );
806 (*pixels++) = static_cast<unsigned char>( m_b.get_unsafe(y,x) * 255 );
811 for (
unsigned int y=0;y<ly;y++) {
812 unsigned char *pixels = this->
get_unsafe(0,y,0);
813 for (
unsigned int x=0;x<lx;x++)
815 (*pixels++) = static_cast<unsigned char>( m_r.get_unsafe(y,x) );
816 (*pixels++) = static_cast<unsigned char>( m_g.get_unsafe(y,x) );
817 (*pixels++) = static_cast<unsigned char>( m_b.get_unsafe(y,x) );
827 void loadFromStreamAsJPEG(
CStream &in );
847 bool loadFromFile(
const std::string& fileName,
int isColor = -1 );
858 bool loadFromXPM(
const char** xpm_array,
bool swap_rb =
true );
877 bool saveToFile(
const std::string& fileName,
int jpeg_quality = 95 )
const;
900 void grayscale(
CImage &ret )
const;
905 void colorImage(
CImage &ret )
const;
910 void colorImageInPlace();
916 void grayscaleInPlace();
944 TImageChannels nChannels,
945 bool originTopLeft );
948 void releaseIpl(
bool thisIsExternalImgUnload =
false) MRPT_NO_THROWS;
TConstructorFlags_CImage
For usage in one of the CImage constructors.
CImage(const Eigen::MatrixBase< Derived > &m, bool matrix_is_normalized)
Explicit constructor from a matrix, interpreted as grayscale intensity values, in the range [0...
CImage scaleHalf() const
Returns a new image scaled down to half its original size.
std::string m_externalFile
The file name of a external storage image.
CImage scaleHalfSmooth() const
Returns a new image scaled down to half its original size (averaging between every two rows) On odd s...
The virtual base class which provides a unified interface for all persistent objects in MRPT...
bool m_imgIsReadOnly
Set to true only when using setFromIplImageReadOnly.
A class for storing images as grayscale or RGB bitmaps.
void resize(unsigned int width, unsigned int height, TImageChannels nChannels, bool originTopLeft)
Changes the size of the image, erasing previous contents (does NOT scale its current content...
A pair (x,y) of pixel coordinates (integer resolution).
static std::string IMAGES_PATH_BASE
By default, ".".
std::string getExternalStorageFile() const MRPT_NO_THROWS
< Only if isExternallyStored() returns true.
#define MRPT_NO_THROWS
Used after member declarations.
TImageSize getSize() const
Return the size of the image.
int TImageChannels
For use in mrpt::utils::CImage.
static bool DISABLE_JPEG_COMPRESSION
By default, when storing images through the CSerializable interface, RGB images are JPEG-compressed t...
CImage(const CImage &other_img, TConstructorFlags_CImage constructor_flag)
Fast constructor of a grayscale version of another image, making a reference to the original image if...
bool isColor() const
Returns true if the image is RGB, false if it is grayscale.
CImage grayscale() const
Returns a grayscale version of the image, or itself if it is already a grayscale image.
void forceLoad() const
For external storage image objects only, this method makes sure the image is loaded in memory...
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
#define DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE(class_name, base_name)
This declaration must be inserted in all CSerializable classes definition, before the class declarati...
static int SERIALIZATION_JPEG_QUALITY
Unless DISABLE_JPEG_COMPRESSION=true, this sets the JPEG quality (range 1-100) of serialized RGB imag...
bool isExternallyStored() const MRPT_NO_THROWS
See setExternalStorage().
void setFromRGBMatrices(const Eigen::MatrixBase< Derived > &m_r, const Eigen::MatrixBase< Derived > &m_g, const Eigen::MatrixBase< Derived > &m_b, bool matrix_is_normalized=true)
Set the image from RGB matrices, given the pixels in the range [0,1] (normalized=true) or [0...
std::string getExternalStorageFileAbsolutePath() const
Only if isExternallyStored() returns true.
void setFromMatrix(const Eigen::MatrixBase< Derived > &m, bool matrix_is_normalized=true)
Set the image from a matrix, interpreted as grayscale intensity values, in the range [0...
TInterpolationMethod
Interpolation methods for images.
void normalize(Scalar valMin, Scalar valMax)
Scales all elements such as the minimum & maximum values are shifted to the given values...
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define DEFINE_SERIALIZABLE(class_name)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
CImage scaleDouble() const
Returns a new image scaled up to double its original size.
const T * getAs() const
Returns a pointer to a const T* containing the image - the idea is to call like "img.getAs()" so we can avoid here including OpenCV's headers.
#define DEFINE_SERIALIZABLE_POST_CUSTOM_BASE(class_name, base_name)
A matrix of dynamic size.
This virtual class defines the interface of any object accepting drawing primitives on it...
bool m_imgIsExternalStorage
Set to true only when using setExternalStorage.
T * getAs()
Returns a pointer to a T* containing the image - the idea is to call like "img.getAs()" so ...
This class is a "CSerializable" wrapper for "CMatrixFloat".
Used in mrpt::utils::CImage.
void * img
The internal IplImage pointer to the actual image content.
EIGEN_STRONG_INLINE Scalar get_unsafe(const size_t row, const size_t col) const
Read-only access to one element (Use with caution, bounds are not checked!)
Structure to hold the parameters of a pinhole camera model.
void BASE_IMPEXP cross_correlation_FFT(const CMatrixFloat &A, const CMatrixFloat &B, CMatrixFloat &out_corr)
Correlation of two matrixes using 2D FFT.
static bool DISABLE_ZIP_COMPRESSION
By default, when storing images through the CSerializable interface, grayscale images will be ZIP com...