/////////////////////////////////////////////////////////////////////////////
// Copyright: (C) 2008-19 Cesar Mauri Loba - CREA Software Systems
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
/////////////////////////////////////////////////////////////////////////////
#ifndef CRVIMAGE_H
#define CRVIMAGE_H
#include
#include
#include
#include
class CIplImage
{
public:
// Methods
// Construction
CIplImage ();
CIplImage (IplImage *pImg);
CIplImage ( int width, int height, int depth= IPL_DEPTH_8U,
const char *pColorOrder= "GRAY");
~CIplImage ();
// Creation/Initialization
bool Create (int width, int height,
unsigned int depth= IPL_DEPTH_8U, const char *pColorOrder= "GRAY",
int origin= IPL_ORIGIN_TL, int align= IPL_ALIGN_QWORD );
bool Import (IplImage *pImage); // Imported images are not automatically released
// Returns the internal pointer, which is set to NULL, and forgets
// about its deallocation
IplImage* Detach();
void Free ();
void Swap (CIplImage *pOtherImg);
void Reset ();
bool SetROI (int x, int y, int width,
int height, unsigned int coi= 0);
bool SetROI (IplROI &roi) {
return SetROI ( roi.xOffset, roi.yOffset,
roi.width, roi.height, roi.coi); }
bool SetROI (CvRect &rect) {
return SetROI ( rect.x, rect.y, rect.width, rect.height); }
void GetROI (IplROI &roi);
void ResetROI ();
void PushROI ();
void PopROI ();
bool Initialized () const { return m_pIplImage!= NULL; }
IplImage *ptr () { return m_pIplImage; }
const IplImage *ptr () const { return m_pIplImage; }
int Width () const { assert (m_pIplImage); return m_pIplImage->width; }
int Height () const { assert (m_pIplImage); return m_pIplImage->height; }
cv::Size GetSize() const {
assert (m_pIplImage);
return cv::Size (m_pIplImage->width, m_pIplImage->height);
}
// 0 - top-left origin, 1 - bottom-left origin (Windows bitmaps style)
int Origin () const { assert (m_pIplImage); return m_pIplImage->origin; }
int Depth () const { assert (m_pIplImage); return m_pIplImage->depth; }
int Align() const { assert (m_pIplImage); return m_pIplImage->align; }
private:
enum { ROI_STACK_SIZE= 10 };
// Attributes
IplImage *m_pIplImage;
bool m_importedImage;
IplROI *m_importedROI;
IplROI m_roiStack[ROI_STACK_SIZE];
int m_roiStackPtr;
// Private methods
void InitROIStack (int width, int height);
void Init();
};
#endif // IPLIMAGE_H