summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ovision/see/magnifier.cc
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/ovision/see/magnifier.cc')
-rw-r--r--2005/i/robert/src/ovision/see/magnifier.cc34
1 files changed, 23 insertions, 11 deletions
diff --git a/2005/i/robert/src/ovision/see/magnifier.cc b/2005/i/robert/src/ovision/see/magnifier.cc
index 82485b4..e819437 100644
--- a/2005/i/robert/src/ovision/see/magnifier.cc
+++ b/2005/i/robert/src/ovision/see/magnifier.cc
@@ -11,18 +11,16 @@
/// Constructeur
Magnifier::Magnifier (Img *img, Segm *segm, Group::ZoneType aim)
-: segm_ (segm), img_ (img), aim_ (aim), skittleList_ (0)
+: segm_ (segm), img_ (img), aim_ (aim)
{
oconfig_ = OConfig::getInstance ();
itemList_ = new std::vector<Zone>[Group::nbZoneType];
- skittleList_ = new std::vector<Skittle>;
}
/// Destructeur
Magnifier::~Magnifier (void)
{
delete [] itemList_;
- delete skittleList_;
}
@@ -62,11 +60,12 @@ Magnifier::analyse (std::vector<Zone> &zoneList)
continue;
add (*iter, itemList_);
}
+ // parcours des zones jusqu'à ce qu'il n'y ai plus de changement à faire
while (scan ());
- skittleList_->clear ();
+ // analyse des objets trouvés
if (itemList_[aim_].size () != 0)
{
- bool find = 0;
+ bool find = false;
for (std::vector<Zone>::iterator iter = itemList_[aim_].begin ();
iter != itemList_[aim_].end (); ++iter)
{
@@ -75,9 +74,8 @@ Magnifier::analyse (std::vector<Zone> &zoneList)
{
showZone (*iter);
s->show ();
- skittleList_->push_back (*s);
delete s;
- find = 1;
+ find = true;
}
}
return find;
@@ -90,20 +88,33 @@ Magnifier::scan ()
{
bool hasChanged = false;
std::vector<Zone> *newList = new std::vector<Zone>[Group::nbZoneType];
+ int dist;
+ bool find;
for (int i=0; i <Group::nbZoneType; ++i)
{
- for(std::vector<Zone>::iterator iter = itemList_[i].begin (); iter != itemList_[i].end (); ++iter)
+ for (std::vector<Zone>::iterator iter = itemList_[i].begin (); iter != itemList_[i].end (); ++iter)
{
if (!checkIsUnique (*iter, newList))
{
hasChanged = true;
continue;
}
- add (*iter, newList);
+ // on regarde s'il une zone noire est situé en dessous pour virer le cercle supérieur des quilles
+ find = false;
+ dist = iter->ymax - iter->ymin;
+ for (std::vector<Zone>::iterator jter = iter+1; jter != itemList_[i].end (); ++jter)
+ {
+ if ((iter->ymax + dist > jter->ymin) && (abs(iter->xmin - jter->xmin) < 40) && (abs(iter->xmax - jter->xmax) < 40))
+ {
+ find = true;
+ break;
+ }
+ }
+ if (!find) add (*iter, newList);
}
-// delete [] itemList_;
- itemList_ = newList;
}
+ delete [] itemList_;
+ itemList_ = newList;
return hasChanged;
}
@@ -310,6 +321,7 @@ Magnifier::showZone (const Zone &z) const
std::cout << "------------------------------------------------------------------\n";
std::cout << "<Magnifier::showZone> position : " << z.xmin << ", " << z.xmax << ", " << z.ymin << ", " << z.ymax << "\n";
std::cout << "<Magnifier::showZone> alone : " << z.alone << "\n";
+ std::cout << "<Magnifier::showZone> density: " << z.density << "\n";
std::cout << "<Magnifier::showZone> ratio/vertical: " << z.ratio << " " << (z.vertical?"vertical":"") << "\n";
// std::cout << "<Magnifier::showZone> orientation : " << z.pcX_ << ", " << z.pcY_ << "\n";
std::cout << "<Magnifier::showZone> partial : " << z.partial << "\n";