mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 10:13:15 +02:00
172 lines
4.1 KiB
C++
172 lines
4.1 KiB
C++
/************************************************************************
|
|
Blob.h
|
|
|
|
FUNCIONALITAT: Definició de la classe CBlob
|
|
AUTOR: Inspecta S.L.
|
|
MODIFICACIONS (Modificació, Autor, Data):
|
|
|
|
FUNCTIONALITY: Definition of the CBlob class and some helper classes to perform
|
|
some calculations on it
|
|
AUTHOR: Inspecta S.L.
|
|
MODIFICATIONS (Modification, Author, Date):
|
|
|
|
**************************************************************************/
|
|
|
|
//! Disable warnings referred to 255 character truncation for the std:map
|
|
#pragma warning( disable : 4786 )
|
|
|
|
#ifndef CBLOB_INSPECTA_INCLUDED
|
|
#define CBLOB_INSPECTA_INCLUDED
|
|
|
|
#include <opencv/cxcore.h>
|
|
#include "BlobLibraryConfiguration.h"
|
|
#include "BlobContour.h"
|
|
|
|
|
|
#ifdef BLOB_OBJECT_FACTORY
|
|
//! Object factory pattern implementation
|
|
#include "..\inspecta\DesignPatterns\ObjectFactory.h"
|
|
#endif
|
|
|
|
|
|
//! Type of labelled images
|
|
typedef unsigned int t_labelType;
|
|
|
|
|
|
//! Blob class
|
|
class CBlob
|
|
{
|
|
typedef std::list<CBlobContour> t_contourList;
|
|
|
|
public:
|
|
CBlob();
|
|
CBlob( t_labelType id, CvPoint startPoint, CvSize originalImageSize );
|
|
~CBlob();
|
|
|
|
//! Copy constructor
|
|
CBlob( const CBlob &src );
|
|
CBlob( const CBlob *src );
|
|
|
|
//! Operador d'assignació
|
|
//! Assigment operator
|
|
CBlob& operator=(const CBlob &src );
|
|
|
|
//! Adds a new internal contour to the blob
|
|
void AddInternalContour( const CBlobContour &newContour );
|
|
|
|
//! Retrieves contour in Freeman's chain code
|
|
CBlobContour *GetExternalContour()
|
|
{
|
|
return &m_externalContour;
|
|
}
|
|
|
|
//! Retrieves blob storage
|
|
CvMemStorage *GetStorage()
|
|
{
|
|
return m_storage;
|
|
}
|
|
|
|
//! Get label ID
|
|
t_labelType GetID()
|
|
{
|
|
return m_id;
|
|
}
|
|
//! > 0 for extern blobs, 0 if not
|
|
int Exterior( IplImage *mask, bool xBorder = true, bool yBorder = true );
|
|
//! Compute blob's area
|
|
double Area();
|
|
//! Compute blob's perimeter
|
|
double Perimeter();
|
|
//! Compute blob's moment (p,q up to MAX_CALCULATED_MOMENTS)
|
|
double Moment(int p, int q);
|
|
|
|
//! Compute extern perimeter
|
|
double ExternPerimeter( IplImage *mask, bool xBorder = true, bool yBorder = true );
|
|
|
|
//! Get mean grey color
|
|
double Mean( IplImage *image );
|
|
|
|
//! Get standard deviation grey color
|
|
double StdDev( IplImage *image );
|
|
|
|
//! Indica si el blob està buit ( no té cap info associada )
|
|
//! Shows if the blob has associated information
|
|
bool IsEmpty();
|
|
|
|
//! Retorna el poligon convex del blob
|
|
//! Calculates the convex hull of the blob
|
|
t_PointList GetConvexHull();
|
|
|
|
//! Pinta l'interior d'un blob d'un color determinat
|
|
//! Paints the blob in an image
|
|
void FillBlob( IplImage *imatge, CvScalar color, int offsetX = 0, int offsetY = 0 );
|
|
|
|
//! Join a blob to current one (add's contour
|
|
void JoinBlob( CBlob *blob );
|
|
|
|
//! Get bounding box
|
|
CvRect GetBoundingBox();
|
|
//! Get bounding ellipse
|
|
CvBox2D GetEllipse();
|
|
|
|
//! Minimun X
|
|
double MinX()
|
|
{
|
|
return GetBoundingBox().x;
|
|
}
|
|
//! Minimun Y
|
|
double MinY()
|
|
{
|
|
return GetBoundingBox().y;
|
|
}
|
|
//! Maximun X
|
|
double MaxX()
|
|
{
|
|
return GetBoundingBox().x + GetBoundingBox().width;
|
|
}
|
|
//! Maximun Y
|
|
double MaxY()
|
|
{
|
|
return GetBoundingBox().y + GetBoundingBox().height;
|
|
}
|
|
private:
|
|
|
|
//! Deallocates all contours
|
|
void ClearContours();
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Blob contours
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//! Contour storage memory
|
|
CvMemStorage *m_storage;
|
|
//! External contour of the blob (crack codes)
|
|
CBlobContour m_externalContour;
|
|
//! Internal contours (crack codes)
|
|
t_contourList m_internalContours;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Blob features
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//! Label number
|
|
t_labelType m_id;
|
|
//! Area
|
|
double m_area;
|
|
//! Perimeter
|
|
double m_perimeter;
|
|
//! Extern perimeter from blob
|
|
double m_externPerimeter;
|
|
//! Mean gray color
|
|
double m_meanGray;
|
|
//! Standard deviation from gray color blob distribution
|
|
double m_stdDevGray;
|
|
//! Bounding box
|
|
CvRect m_boundingBox;
|
|
//! Bounding ellipse
|
|
CvBox2D m_ellipse;
|
|
//! Sizes from image where blob is extracted
|
|
CvSize m_originalImageSize;
|
|
};
|
|
|
|
#endif //CBLOB_INSPECTA_INCLUDED
|