Classe per calcular si un punt cau dins del blob Class to calculate whether a point is inside a blob. More...
#include <Blob.h>
Public Member Functions | |
| CBlobGetXYInside () | |
| Constructor est�dard Standard constructor. | |
| CBlobGetXYInside (CvPoint p) | |
| Constructor: indiquem el punt Constructor: sets the point. | |
| double | operator() (const CBlob &blob) const |
| |
| const char * | GetNom () const |
| Obt�el nom de l'operador. | |
| operator COperadorBlob * () const | |
Classe per calcular si un punt cau dins del blob Class to calculate whether a point is inside a blob.
Definition at line 778 of file Blob.h.
| double CBlobGetXYInside::operator() | ( | const CBlob & | blob | ) | const [virtual] |
Implements COperadorBlob.
Definition at line 977 of file Blob.cpp.
00978 { 00979 if( blob.Edges() == NULL || blob.Edges()->total == 0 ) return 0.0; 00980 00981 // passem els punts del blob a un vector de punts de les STL 00982 CvSeqReader reader; 00983 CBlob::vectorPunts vectorEdges; 00984 CBlob::vectorPunts::iterator itEdges, itEdgesSeguent; 00985 CvPoint edgeactual; 00986 bool dinsBlob; 00987 00988 // agafem tots els punts amb la mateixa y que l'actual 00989 cvStartReadSeq( blob.Edges(), &reader); 00990 00991 for( int i=0; i< blob.Edges()->total; i++) 00992 { 00993 CV_READ_SEQ_ELEM( edgeactual ,reader ); 00994 if( edgeactual.y == m_p.y ) 00995 vectorEdges.push_back( edgeactual ); 00996 } 00997 00998 if( vectorEdges.size() == 0 ) return 0.0; 00999 01000 // ordenem el vector per les Y's i les X's d'esquerra a dreta 01001 std::sort( vectorEdges.begin(), vectorEdges.end(), CBlob::comparaCvPoint() ); 01002 01003 // recorrem el punts del blob de la mateixa fila que el punt d'entrada 01004 // i mirem si la X del punt d'entrada est�entre dos coordenades "plenes" 01005 // del blob 01006 itEdges = vectorEdges.begin(); 01007 itEdgesSeguent = vectorEdges.begin() + 1; 01008 dinsBlob = true; 01009 01010 while( itEdges != (vectorEdges.end() - 1) ) 01011 { 01012 if( (*itEdges).x <= m_p.x && (*itEdgesSeguent).x >= m_p.x && dinsBlob ) 01013 { 01014 vectorEdges.clear(); 01015 return 1.0; 01016 } 01017 01018 itEdges++; 01019 itEdgesSeguent++; 01020 dinsBlob = !dinsBlob; 01021 } 01022 01023 vectorEdges.clear(); 01024 return 0.0; 01025 }
1.6.1