126 CImage(
unsigned int width,
128 TImageChannels nChannels =
CH_RGB,
129 bool originTopLeft = true
133 CImage( const CImage &o );
159 else this->setFromImageReadOnly(other_img);
170 template <
typename Derived>
171 explicit inline CImage(
const Eigen::MatrixBase<Derived> &m,
bool matrix_is_normalized) : img(NULL),m_imgIsReadOnly(false), m_imgIsExternalStorage(false)
173 this->setFromMatrix(m,matrix_is_normalized);
212 TImageChannels nChannels,
215 changeSize(width,height,nChannels,originTopLeft);
231 void rotateImage(
double angle_radians,
unsigned int center_x,
unsigned int center_y,
double scale = 1.0 );
240 void setPixel(
int x,
int y,
size_t color);
244 void setOriginTopLeft(
bool val);
261 unsigned int width = 1,
276 unsigned int width = 1);
278 void equalizeHistInPlace();
279 void equalizeHist(
CImage &outImg )
const;
288 this->scaleHalf(ret);
293 void scaleHalf(
CImage &out_image)
const;
303 this->scaleHalfSmooth(ret);
308 void scaleHalfSmooth(
CImage &out_image)
const;
318 this->scaleDouble(ret);
323 void scaleDouble(
CImage &out_image)
const;
332 void update_patch(
const CImage &patch,
333 const unsigned int col,
334 const unsigned int row);
342 const unsigned int col=0,
343 const unsigned int row=0,
344 const unsigned int width=1,
345 const unsigned int height=1 )
const;
352 float correlate(
const CImage &img2int,
int width_init=0,
int height_init=0 )
const;
368 void cross_correlation(
375 int u_search_size=-1,
376 int v_search_size=-1,
377 CImage *out_corr_image = NULL
399 int u_search_size=-1,
400 int v_search_size=-1,
401 float biasThisImg = 0,
415 void flipVertical(
bool also_swapRB =
false);
439 void rectifyImageInPlace(
void *mapX,
void *mapY );
442 void filterMedian(
CImage &out_img,
int W=3 )
const;
445 void filterMedianInPlace(
int W=3 );
448 void filterGaussianInPlace(
int W = 3,
int H = 3 );
451 void filterGaussian(
CImage &out_img,
int W = 3,
int H = 3)
const;
463 bool drawChessboardCorners(
464 std::vector<TPixelCoordf> &cornerCoords,
465 unsigned int check_size_x,
466 unsigned int check_size_y,
467 unsigned int lines_width = 1,
468 unsigned int circles_radius = 4
485 const unsigned int x,
486 const unsigned int y,
487 const unsigned int half_window_size )
const;
507 void copyFromForceLoad(
const CImage &o);
512 void copyFastFrom(
CImage &o );
525 template <
typename T>
inline const T*
getAs()
const {
526 makeSureImageIsLoaded();
527 return static_cast<const T*
>(img);
530 template <
typename T>
inline T*
getAs(){
531 makeSureImageIsLoaded();
532 return static_cast<T*
>(img);
541 unsigned int channel=0)
const;
548 float getAsFloat(
unsigned int col,
unsigned int row,
unsigned int channel)
const;
555 float getAsFloat(
unsigned int col,
unsigned int row)
const;
561 unsigned char* operator()(
unsigned int col,
unsigned int row,
unsigned int channel = 0)
const;
575 size_t getWidth()
const;
580 size_t getHeight()
const;
599 size_t getRowStride()
const;
604 float getMaxAsFloat()
const;
607 bool isColor()
const;
610 bool isOriginTopLeft()
const;
613 const char * getChannelsOrder()
const;
616 void setChannelsOrder_RGB();
618 void setChannelsOrder_BGR();
623 TImageChannels getChannelCount()
const;
635 bool doResize =
true,
650 void getAsRGBMatrices(
654 bool doResize =
true,
689 void setExternalStorage(
const std::string &fileName )
MRPT_NO_THROWS;
698 return m_externalFile;
702 void getExternalStorageFileAbsolutePath(std::string &out_path)
const;
707 getExternalStorageFileAbsolutePath(tmp);
714 inline void forceLoad()
const { makeSureImageIsLoaded(); }
733 void loadFromMemoryBuffer(
unsigned int width,
unsigned int height,
bool color,
unsigned char *rawpixels,
bool swapRedBlue =
false );
738 void loadFromMemoryBuffer(
unsigned int width,
unsigned int height,
unsigned int bytesPerRow,
unsigned char *red,
unsigned char *green,
unsigned char *blue );
742 void loadFromIplImage(
void* iplImage );
749 void setFromIplImage(
void* iplImage );
756 void setFromIplImageReadOnly(
void* iplImage );
768 template <
typename Derived>
769 void setFromMatrix(
const Eigen::MatrixBase<Derived> &m,
bool matrix_is_normalized=
true)
772 const unsigned int lx = m.cols();
773 const unsigned int ly = m.rows();
774 this->changeSize(lx,ly,1,
true);
775 if (matrix_is_normalized) {
776 for (
unsigned int y=0;y<ly;y++) {
777 unsigned char *pixels = this->
get_unsafe(0,y,0);
778 for (
unsigned int x=0;x<lx;x++)
779 (*pixels++) =
static_cast<unsigned char>( m.get_unsafe(y,x) * 255 );
783 for (
unsigned int y=0;y<ly;y++) {
784 unsigned char *pixels = this->
get_unsafe(0,y,0);
785 for (
unsigned int x=0;x<lx;x++)
786 (*pixels++) =
static_cast<unsigned char>( m.get_unsafe(y,x) );
796 template <
typename Derived>
797 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)
800 makeSureImageIsLoaded();
802 ASSERT_((m_r.size() == m_g.size())&&(m_r.size() == m_b.size()));
803 const unsigned int lx = m_r.cols();
804 const unsigned int ly = m_r.rows();
805 this->changeSize(lx,ly,3,
true);
806 this->setChannelsOrder_RGB();
808 if (matrix_is_normalized) {
809 for (
unsigned int y=0;y<ly;y++) {
810 unsigned char *pixels = this->
get_unsafe(0,y,0);
811 for (
unsigned int x=0;x<lx;x++)
813 (*pixels++) = static_cast<unsigned char>( m_r.get_unsafe(y,x) * 255 );
814 (*pixels++) = static_cast<unsigned char>( m_g.get_unsafe(y,x) * 255 );
815 (*pixels++) = static_cast<unsigned char>( m_b.get_unsafe(y,x) * 255 );
820 for (
unsigned int y=0;y<ly;y++) {
821 unsigned char *pixels = this->
get_unsafe(0,y,0);
822 for (
unsigned int x=0;x<lx;x++)
824 (*pixels++) = static_cast<unsigned char>( m_r.get_unsafe(y,x) );
825 (*pixels++) = static_cast<unsigned char>( m_g.get_unsafe(y,x) );
826 (*pixels++) = static_cast<unsigned char>( m_b.get_unsafe(y,x) );
836 void loadFromStreamAsJPEG(
CStream &in );
856 bool loadFromFile(
const std::string& fileName,
int isColor = -1 );
867 bool loadFromXPM(
const char** xpm_array,
bool swap_rb =
true );
886 bool saveToFile(
const std::string& fileName,
int jpeg_quality = 95 )
const;
909 void grayscale(
CImage &ret )
const;
914 void colorImage(
CImage &ret )
const;
919 void colorImageInPlace();
925 void grayscaleInPlace();
953 TImageChannels nChannels,
954 bool originTopLeft );
957 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...
std::string m_externalFile
The file name of a external storage image.
CImage scaleDouble() const
Returns a new image scaled up to double its original size.
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.
#define DECLARE_MEXPLUS_FROM(complete_type)
This must be inserted if a custom conversion method for MEX API is implemented in the class...
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.
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.
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!)
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...
const T * getAs() const
Returns a pointer to a const T* containing the image - the idea is to call like "img.getAs<IplImage>()" so we can avoid here including OpenCV's headers.
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 DECLARE_MEX_CONVERSION
This must be inserted if a custom conversion method for MEX API is implemented in the class...
void forceLoad() const
For external storage image objects only, this method makes sure the image is loaded in memory...
#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...
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...
void setFromImageReadOnly(const CImage &other_img)
Sets the internal IplImage pointer to that of another given image, WITHOUT making a copy...
CImage scaleHalfSmooth() const
Returns a new image scaled down to half its original size (averaging between every two rows) ...
CImage scaleHalf() const
Returns a new image scaled down to half its original size.
#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<IplImage>()" so ...
This class is a "CSerializable" wrapper for "CMatrixFloat".
TPenStyle
Definition of pen styles.
Used in mrpt::utils::CImage.
void * img
The internal IplImage pointer to the actual image content.
TImageSize getSize() const
Return the size of the image.
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...
std::string getExternalStorageFileAbsolutePath() const
Only if isExternallyStored() returns true.