199 template <
typename Derived>
201 const Eigen::MatrixBase<Derived>& m,
bool matrix_is_normalized)
276 double angle_radians,
unsigned int center_x,
unsigned int center_y,
319 int x,
int y,
int radius,
321 unsigned int width = 1)
override;
383 const CImage& patch,
const unsigned int col,
const unsigned int row);
391 CImage& patch,
const unsigned int col = 0,
const unsigned int row = 0,
392 const unsigned int width = 1,
const unsigned int height = 1)
const;
401 const CImage& img2int,
int width_init = 0,
int height_init = 0)
const;
424 const CImage& patch_img,
size_t& u_max,
size_t& v_max,
double& max_val,
425 int u_search_ini = -1,
int v_search_ini = -1,
int u_search_size = -1,
426 int v_search_size = -1,
CImage* out_corr_image =
nullptr)
const;
449 int u_search_ini = -1,
int v_search_ini = -1,
int u_search_size = -1,
450 int v_search_size = -1,
float biasThisImg = 0,
451 float biasInImg = 0)
const;
524 std::vector<TPixelCoordf>& cornerCoords,
unsigned int check_size_x,
525 unsigned int check_size_y,
unsigned int lines_width = 1,
526 unsigned int circles_radius = 4);
543 const unsigned int x,
const unsigned int y,
544 const unsigned int half_window_size)
const;
586 template <
typename T>
590 return static_cast<const T*
>(
img);
595 template <
typename T>
599 return static_cast<T*
>(
img);
607 unsigned int col,
unsigned int row,
unsigned int channel = 0)
const;
616 unsigned int col,
unsigned int row,
unsigned int channel)
const;
632 unsigned int col,
unsigned int row,
unsigned int channel = 0)
const;
710 int x_min = 0,
int y_min = 0,
int x_max = -1,
int y_max = -1)
const;
732 int x_min = 0,
int y_min = 0,
int x_max = -1,
int y_max = -1)
const;
813 void unload() const noexcept;
826 unsigned char* rawpixels,
bool swapRedBlue = false);
833 unsigned int width,
unsigned int height,
unsigned int bytesPerRow,
834 unsigned char*
red,
unsigned char*
green,
unsigned char*
blue);
877 template <
typename Derived>
879 const Eigen::MatrixBase<Derived>& m,
bool matrix_is_normalized =
true)
882 const unsigned int lx = m.cols();
883 const unsigned int ly = m.rows();
885 if (matrix_is_normalized)
887 for (
unsigned int y = 0;
y < ly;
y++)
890 for (
unsigned int x = 0;
x < lx;
x++)
892 static_cast<unsigned char>(m.get_unsafe(
y,
x) * 255);
897 for (
unsigned int y = 0;
y < ly;
y++)
900 for (
unsigned int x = 0;
x < lx;
x++)
902 static_cast<unsigned char>(m.get_unsafe(
y,
x));
913 template <
typename Derived>
915 const Eigen::MatrixBase<Derived>& m_r,
916 const Eigen::MatrixBase<Derived>& m_g,
917 const Eigen::MatrixBase<Derived>& m_b,
bool matrix_is_normalized =
true)
922 ASSERT_((m_r.size() == m_g.size()) && (m_r.size() == m_b.size()));
923 const unsigned int lx = m_r.cols();
924 const unsigned int ly = m_r.rows();
928 if (matrix_is_normalized)
930 for (
unsigned int y = 0;
y < ly;
y++)
933 for (
unsigned int x = 0;
x < lx;
x++)
936 static_cast<unsigned char>(m_r.get_unsafe(
y,
x) * 255);
938 static_cast<unsigned char>(m_g.get_unsafe(
y,
x) * 255);
940 static_cast<unsigned char>(m_b.get_unsafe(
y,
x) * 255);
946 for (
unsigned int y = 0;
y < ly;
y++)
949 for (
unsigned int x = 0;
x < lx;
x++)
952 static_cast<unsigned char>(m_r.get_unsafe(
y,
x));
954 static_cast<unsigned char>(m_g.get_unsafe(
y,
x));
956 static_cast<unsigned char>(m_b.get_unsafe(
y,
x));
1003 bool loadFromXPM(
const char** xpm_array,
bool swap_rb =
true);
1096 bool originTopLeft);
1099 void releaseIpl(
bool thisIsExternalImgUnload =
false) noexcept;
#define DEFINE_SERIALIZABLE(class_name)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
#define DECLARE_MEXPLUS_FROM(complete_type)
This must be inserted if a custom conversion method for MEX API is implemented in the class.
#define DECLARE_MEX_CONVERSION
This must be inserted if a custom conversion method for MEX API is implemented in the class.
This class is a "CSerializable" wrapper for "CMatrixFloat".
A matrix of dynamic size.
This virtual class defines the interface of any object accepting drawing primitives on it.
TPenStyle
Definition of pen styles.
A class for storing images as grayscale or RGB bitmaps.
unsigned char * get_unsafe(unsigned int col, unsigned int row, unsigned int channel=0) const
Access to pixels without checking boundaries - Use normally the () operator better,...
static bool DISABLE_JPEG_COMPRESSION
By default, when storing images through the CSerializable interface, RGB images are JPEG-compressed t...
void joinImagesHorz(const CImage &im1, const CImage &im2)
Joins two images side-by-side horizontally.
void releaseIpl(bool thisIsExternalImgUnload=false) noexcept
Release the internal IPL image, if not nullptr or read-only.
unsigned char * operator()(unsigned int col, unsigned int row, unsigned int channel=0) const
Returns a pointer to a given pixel information.
float getMaxAsFloat() const
Return the maximum pixel value of the image, as a float value in the range [0,1].
void filterMedianInPlace(int W=3)
Filter the image with a Median filter with a window size WxH, replacing "this" image by the filtered ...
void flipHorizontal()
Flips the image horizontally.
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 setFromIplImage(void *iplImage)
Reads the image from a OpenCV IplImage object (WITHOUT making a copy).
float KLT_response(const unsigned int x, const unsigned int y, const unsigned int half_window_size) const
Compute the KLT response at a given pixel (x,y) - Only for grayscale images (for efficiency it avoids...
void equalizeHist(CImage &outImg) const
Equalize the image histogram, saving the new image in the given output object.
void loadFromIplImage(void *iplImage)
Reads the image from a OpenCV IplImage object (making a COPY).
T * getAs()
Returns a pointer to a T* containing the image - the idea is to call like "img.getAs<IplImage>()" so ...
void colorImageInPlace()
Replaces this grayscale image with a RGB version of it.
TImageSize getSize() const
Return the size of the image.
CImage(const Eigen::MatrixBase< Derived > &m, bool matrix_is_normalized)
Explicit constructor from a matrix, interpreted as grayscale intensity values, in the range [0,...
void filterMedian(CImage &out_img, int W=3) const
Filter the image with a Median filter with a window size WxW, returning the filtered image in out_img
bool loadFromFile(const std::string &fileName, int isColor=-1)
Load image from a file, whose format is determined from the extension (internally uses OpenCV).
static int SERIALIZATION_JPEG_QUALITY
Unless DISABLE_JPEG_COMPRESSION=true, this sets the JPEG quality (range 1-100) of serialized RGB imag...
void * img
The internal IplImage pointer to the actual image content.
CImage scaleHalf() const
Returns a new image scaled down to half its original size.
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...
size_t getRowStride() const
Returns the row stride of the image: this is the number of bytes between two consecutive rows.
bool isOriginTopLeft() const
Returns true if the coordinates origin is top-left, or false if it is bottom-left
void unload() const noexcept
For external storage image objects only, this method unloads the image from memory (or does nothing i...
void filterGaussianInPlace(int W=3, int H=3)
Filter the image with a Gaussian filter with a window size WxH, returning the filtered image in out_i...
bool loadFromXPM(const char **xpm_array, bool swap_rb=true)
Loads the image from an XPM array, as #include'd from a ".xpm" file.
void filterGaussian(CImage &out_img, int W=3, int H=3) const
Filter the image with a Gaussian filter with a window size WxH, replacing "this" image by the filtere...
bool drawChessboardCorners(std::vector< TPixelCoordf > &cornerCoords, unsigned int check_size_x, unsigned int check_size_y, unsigned int lines_width=1, unsigned int circles_radius=4)
Draw onto this image the detected corners of a chessboard.
void rectifyImageInPlace(const mrpt::utils::TCamera &cameraParams)
Rectify (un-distort) the image according to a certain camera matrix and vector of distortion coeffici...
void cross_correlation_FFT(const CImage &in_img, math::CMatrixFloat &out_corr, int u_search_ini=-1, int v_search_ini=-1, int u_search_size=-1, int v_search_size=-1, float biasThisImg=0, float biasInImg=0) const
Computes the correlation matrix between this image and another one.
void rotateImage(double angle_radians, unsigned int center_x, unsigned int center_y, double scale=1.0)
Rotates the image by the given angle around the given center point, with an optional scale factor.
CImage()
Default constructor: initialize an 1x1 RGB image.
void changeSize(unsigned int width, unsigned int height, TImageChannels nChannels, bool originTopLeft)
Resize the buffers in "img" to accomodate a new image size and/or format.
CImage scaleHalfSmooth() const
Returns a new image scaled down to half its original size (averaging between every two rows)
size_t getHeight() const override
Returns the height of the image in pixels.
CImage & operator=(const CImage &o)
Copy operator (if the image is externally stored, the writen image will be such as well).
void grayscaleInPlace()
Replaces the image with a grayscale version of it.
void swap(CImage &o)
Very efficient swap of two images (just swap the internal pointers)
bool isColor() const
Returns true if the image is RGB, false if it is grayscale.
void extract_patch(CImage &patch, const unsigned int col=0, const unsigned int row=0, const unsigned int width=1, const unsigned int height=1) const
Extract a patch from this image, saveing it into "patch" (its previous contents will be overwritten).
void setExternalStorage(const std::string &fileName) noexcept
By using this method the image is marked as referenced to an external file, which will be loaded only...
void loadFromStreamAsJPEG(CStream &in)
Reads the image from a binary stream containing a binary jpeg file.
void saveToStreamAsJPEG(mrpt::utils::CStream &out, const int jpeg_quality=95) const
Save image to binary stream as a JPEG (.jpg) compressed format.
void copyFromForceLoad(const CImage &o)
Copies from another image, and, if that one is externally stored, the image file will be actually loa...
void update_patch(const CImage &patch, const unsigned int col, const unsigned int row)
Update a part of this image with the "patch" given as argument.
static bool DISABLE_ZIP_COMPRESSION
By default, when storing images through the CSerializable interface, grayscale images will be ZIP com...
std::string getExternalStorageFile() const noexcept
Only if isExternallyStored() returns true.
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,...
void setFromIplImageReadOnly(void *iplImage)
Reads the image from a OpenCV IplImage object (WITHOUT making a copy) and from now on the image canno...
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,...
CImage(TConstructorFlags_CImage)
Fast constructor that leaves the image uninitialized (the internal IplImage pointer set to nullptr).
void drawCircle(int x, int y, int radius, const mrpt::utils::TColor &color=mrpt::utils::TColor(255, 255, 255), unsigned int width=1) override
Draws a circle of a given radius.
float getAsFloat(unsigned int col, unsigned int row, unsigned int channel) const
Returns the contents of a given pixel at the desired channel, in float format: [0,...
void scaleImage(unsigned int width, unsigned int height, TInterpolationMethod interp=IMG_INTERP_CUBIC)
Scales this image to a new size, interpolating as needed.
float correlate(const CImage &img2int, int width_init=0, int height_init=0) const
Computes the correlation coefficient (returned as val), between two images This function use grayscal...
void setPixel(int x, int y, size_t color) override
Changes the value of the pixel (x,y).
const T * getAs() const
Returns a pointer to a const T* containing the image - the idea is to call like "img....
void colorImage(CImage &ret) const
Returns a RGB version of the grayscale image, or itself if it is already a RGB image.
bool isExternallyStored() const noexcept
See setExternalStorage().
size_t getWidth() const override
Returns the width of the image in pixels.
bool m_imgIsReadOnly
Set to true only when using setFromIplImageReadOnly.
void cross_correlation(const CImage &patch_img, size_t &u_max, size_t &v_max, double &max_val, int u_search_ini=-1, int v_search_ini=-1, int u_search_size=-1, int v_search_size=-1, CImage *out_corr_image=nullptr) const
Computes the correlation between this image and another one, encapsulating the openCV function cvMatc...
bool saveToFile(const std::string &fileName, int jpeg_quality=95) const
Save the image to a file, whose format is determined from the extension (internally uses OpenCV).
void getAsRGBMatrices(mrpt::math::CMatrixFloat &outMatrixR, mrpt::math::CMatrixFloat &outMatrixG, mrpt::math::CMatrixFloat &outMatrixB, bool doResize=true, int x_min=0, int y_min=0, int x_max=-1, int y_max=-1) const
Returns the image as RGB matrices with pixel values in the range [0,1].
void rectifyImage(CImage &out_img, const mrpt::utils::TCamera &cameraParams) const
Rectify (un-distort) the image according to some camera parameters, and returns an output un-distorte...
void loadFromMemoryBuffer(unsigned int width, unsigned int height, bool color, unsigned char *rawpixels, bool swapRedBlue=false)
Reads the image from raw pixels buffer in memory.
std::string getExternalStorageFileAbsolutePath() const
Only if isExternallyStored() returns true.
void makeSureImageIsLoaded() const
Checks if the image is of type "external storage", and if so and not loaded yet, load it.
static bool loadTGA(const std::string &fileName, mrpt::utils::CImage &out_RGB, mrpt::utils::CImage &out_alpha)
Loads a TGA true-color RGBA image as two CImage objects, one for the RGB channels plus a separate gra...
void getAsMatrixTiled(math::CMatrix &outMatrix) const
Returns the image as a matrix, where the image is "tiled" (repeated) the required number of times to ...
void line(int x0, int y0, int x1, int y1, const mrpt::utils::TColor color, unsigned int width=1, TPenStyle penStyle=psSolid) override
Draws a line.
virtual ~CImage()
Destructor:
void getAsMatrix(mrpt::math::CMatrixFloat &outMatrix, bool doResize=true, int x_min=0, int y_min=0, int x_max=-1, int y_max=-1) const
Returns the image as a matrix with pixel grayscale values in the range [0,1].
TImageChannels getChannelCount() const
Returns the number of channels, typically 1 (GRAY) or 3 (RGB)
static const std::string & getImagesPathBase()
By default, ".".
CImage scaleDouble() const
Returns a new image scaled up to double its original size.
void copyFastFrom(CImage &o)
Moves an image from another object, erasing the origin image in the process (this is much faster than...
static void setImagesPathBase(const std::string &path)
void swapRB()
Swaps red and blue channels.
std::string m_externalFile
The file name of a external storage image.
void equalizeHistInPlace()
Equalize the image histogram, replacing the original image.
CImage grayscale() const
Returns a grayscale version of the image, or itself if it is already a grayscale image.
void setFromImageReadOnly(const CImage &other_img)
Sets the internal IplImage pointer to that of another given image, WITHOUT making a copy,...
void setChannelsOrder_RGB()
Marks the channel ordering in a color image as "RGB" (this doesn't actually modify the image data,...
void forceLoad() const
For external storage image objects only, this method makes sure the image is loaded in memory.
void normalize()
Optimize the brightness range of an image without using histogram Only for one channel images.
bool m_imgIsExternalStorage
Set to true only when using setExternalStorage.
void flipVertical(bool also_swapRB=false)
Flips the image vertically.
void setChannelsOrder_BGR()
Marks the channel ordering in a color image as "BGR" (this doesn't actually modify the image data,...
const char * getChannelsOrder() const
Returns a string of the form "BGR","RGB" or "GRAY" indicating the channels ordering.
void setOriginTopLeft(bool val)
Changes the property of the image stating if the top-left corner (vs.
The virtual base class which provides a unified interface for all persistent objects in MRPT.
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
Structure to hold the parameters of a pinhole camera model.
GLenum GLenum GLvoid * row
GLenum GLenum GLenum GLenum GLenum scale
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
GLenum GLsizei GLsizei height
GLsizei const GLchar ** string
TInterpolationMethod
Interpolation methods for images.
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
TConstructorFlags_CImage
For usage in one of the CImage constructors.
@ FAST_REF_OR_CONVERT_TO_GRAY
int TImageChannels
For use in mrpt::utils::CImage.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A pair (x,y) of pixel coordinates (integer resolution).