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;
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,255]->[0,1] The coordinate origin is pixel(0,0)=top-left corner of the image.
void equalizeHistInPlace()
Equalize the image histogram, replacing the original image.
TConstructorFlags_CImage
For usage in one of the CImage constructors.
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...
CImage(const Eigen::MatrixBase< Derived > &m, bool matrix_is_normalized)
Explicit constructor from a matrix, interpreted as grayscale intensity values, in the range [0...
TImageChannels getChannelCount() const
Returns the number of channels, typically 1 (GRAY) or 3 (RGB)
static bool DISABLE_JPEG_COMPRESSION
By default, when storing images through the CSerializable interface, RGB images are JPEG-compressed t...
static int SERIALIZATION_JPEG_QUALITY
Unless DISABLE_JPEG_COMPRESSION=true, this sets the JPEG quality (range 1-100) of serialized RGB imag...
std::string m_externalFile
The file name of a external storage image.
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...
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.
void flipVertical(bool also_swapRB=false)
Flips the image vertically.
GLenum GLenum GLenum GLenum GLenum scale
#define DECLARE_MEXPLUS_FROM(complete_type)
This must be inserted if a custom conversion method for MEX API is implemented in the class...
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...
void unload() const noexcept
For external storage image objects only, this method unloads the image from memory (or does nothing i...
void copyFastFrom(CImage &o)
Moves an image from another object, erasing the origin image in the process (this is much faster than...
void rectifyImageInPlace(const mrpt::utils::TCamera &cameraParams)
Rectify (un-distort) the image according to a certain camera matrix and vector of distortion coeffici...
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 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].
CImage(TConstructorFlags_CImage)
Fast constructor that leaves the image uninitialized (the internal IplImage pointer set to nullptr)...
A pair (x,y) of pixel coordinates (integer resolution).
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...
const char * getChannelsOrder() const
Returns a string of the form "BGR","RGB" or "GRAY" indicating the channels ordering.
float getMaxAsFloat() const
Return the maximum pixel value of the image, as a float value in the range [0,1]. ...
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...
void flipHorizontal()
Flips the image horizontally.
void colorImageInPlace()
Replaces this grayscale image with a RGB version of it.
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 loadFromFile(const std::string &fileName, int isColor=-1)
Load image from a file, whose format is determined from the extension (internally uses OpenCV)...
int TImageChannels
For use in mrpt::utils::CImage.
void normalize()
Optimize the brightness range of an image without using histogram Only for one channel images...
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...
void loadFromIplImage(void *iplImage)
Reads the image from a OpenCV IplImage object (making a COPY).
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.
virtual ~CImage()
Destructor:
CImage & operator=(const CImage &o)
Copy operator (if the image is externally stored, the writen image will be such as well)...
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 getAsMatrixTiled(math::CMatrix &outMatrix) const
Returns the image as a matrix, where the image is "tiled" (repeated) the required number of times to ...
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
size_t getWidth() const override
Returns the width of the image in pixels.
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.
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...
#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...
CImage grayscale() const
Returns a grayscale version of the image, or itself if it is already a grayscale image.
void scaleImage(unsigned int width, unsigned int height, TInterpolationMethod interp=IMG_INTERP_CUBIC)
Scales this image to a new size, interpolating as needed.
size_t getHeight() const override
Returns the height of the image in pixels.
void releaseIpl(bool thisIsExternalImgUnload=false) noexcept
Release the internal IPL image, if not nullptr or read-only.
void forceLoad() const
For external storage image objects only, this method makes sure the image is loaded in memory...
void setChannelsOrder_RGB()
Marks the channel ordering in a color image as "RGB" (this doesn't actually modify the image data...
size_t getRowStride() const
Returns the row stride of the image: this is the number of bytes between two consecutive rows...
void saveToStreamAsJPEG(mrpt::utils::CStream &out, const int jpeg_quality=95) const
Save image to binary stream as a JPEG (.jpg) compressed format.
void swapRB()
Swaps red and blue channels.
void setFromIplImage(void *iplImage)
Reads the image from a OpenCV IplImage object (WITHOUT making a copy).
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.
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...
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 setFromIplImageReadOnly(void *iplImage)
Reads the image from a OpenCV IplImage object (WITHOUT making a copy) and from now on the image canno...
static void setImagesPathBase(const std::string &path)
GLsizei const GLchar ** string
void swap(CImage &o)
Very efficient swap of two images (just swap the internal pointers)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
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 copyFromForceLoad(const CImage &o)
Copies from another image, and, if that one is externally stored, the image file will be actually loa...
void setPixel(int x, int y, size_t color) override
Changes the value of the pixel (x,y).
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...
void filterMedianInPlace(int W=3)
Filter the image with a Median filter with a window size WxH, replacing "this" image by the filtered ...
TInterpolationMethod
Interpolation methods for images.
void setChannelsOrder_BGR()
Marks the channel ordering in a color image as "BGR" (this doesn't actually modify the image data...
void makeSureImageIsLoaded() const
Checks if the image is of type "external storage", and if so and not loaded yet, load it...
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 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.
unsigned char * operator()(unsigned int col, unsigned int row, unsigned int channel=0) const
Returns a pointer to a given pixel information.
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.
void equalizeHist(CImage &outImg) const
Equalize the image histogram, saving the new image in the given output object.
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...
GLenum GLenum GLvoid * row
CImage()
Default constructor: initialize an 1x1 RGB image.
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)...
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.
bool isOriginTopLeft() const
Returns true if the coordinates origin is top-left, or false if it is bottom-left.
A matrix of dynamic size.
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)...
This virtual class defines the interface of any object accepting drawing primitives on it...
static bool DISABLE_ZIP_COMPRESSION
By default, when storing images through the CSerializable interface, grayscale images will be ZIP com...
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 ...
bool isColor() const
Returns true if the image is RGB, false if it is grayscale.
void colorImage(CImage &ret) const
Returns a RGB version of the grayscale image, or itself if it is already a RGB image.
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, which checks the coordinates.
std::string getExternalStorageFile() const noexcept
Only if isExternallyStored() returns true.
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.
bool isExternallyStored() const noexcept
See setExternalStorage().
This class is a "CSerializable" wrapper for "CMatrixFloat".
TPenStyle
Definition of pen styles.
GLenum GLsizei GLsizei height
void setOriginTopLeft(bool val)
Changes the property of the image stating if the top-left corner (vs.
static const std::string & getImagesPathBase()
By default, ".".
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.
void * img
The internal IplImage pointer to the actual image content.
void grayscaleInPlace()
Replaces the image with a grayscale version of it.
void joinImagesHorz(const CImage &im1, const CImage &im2)
Joins two images side-by-side horizontally.
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...
TImageSize getSize() const
Return the size of the image.
Structure to hold the parameters of a pinhole camera model.
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].
std::string getExternalStorageFileAbsolutePath() const
Only if isExternallyStored() returns true.
void loadFromStreamAsJPEG(CStream &in)
Reads the image from a binary stream containing a binary jpeg file.