/******************************************************************** ** Image Component Library (ICL) ** ** ** ** Copyright (C) 2006-2013 CITEC, University of Bielefeld ** ** Neuroinformatics Group ** ** Website: www.iclcv.org and ** ** http://opensource.cit-ec.de/projects/icl ** ** ** ** File : ICLCV/demos/flood-filler/flood-filler.cpp ** ** Module : ICLCV ** ** Authors: Christof Elbrechter ** ** ** ** ** ** GNU LESSER GENERAL PUBLIC LICENSE ** ** This file may be used under the terms of the GNU Lesser General ** ** Public License version 3.0 as published by the ** ** ** ** Free Software Foundation and appearing in the file LICENSE.LGPL ** ** included in the packaging of this file. Please review the ** ** following information to ensure the license requirements will ** ** be met: http://www.gnu.org/licenses/lgpl-3.0.txt ** ** ** ** The development of this software was supported by the ** ** Excellence Cluster EXC 277 Cognitive Interaction Technology. ** ** The Excellence Cluster EXC 277 is a grant of the Deutsche ** ** Forschungsgemeinschaft (DFG) in the context of the German ** ** Excellence Initiative. ** ** ** ********************************************************************/ #include #include #include //TODO: crashes in the destructor GUI gui; GenericGrabber grabber; FloodFiller ff; struct Mouse : public MouseHandler{ bool pressed; Rect lastImageRect; Point pos; Mouse():pressed(false){} void process(const MouseEvent &e){ if(e.isPressEvent() && lastImageRect.contains(e.getX(),e.getY())){ this->pressed = true; this->pos = e.getPos(); } } bool wasPressed(){ bool x = pressed; this->pressed = false; return x; } } mouse; void run(){ static Img8u image = *grabber.grab()->as8u(); mouse.lastImageRect = image.getImageRect(); if(mouse.wasPressed()){ Time t = Time::now(); Time dt; if(pa("-gray")){ icl8u ref = image(mouse.pos.x,mouse.pos.y,0); const FloodFiller::Result &res = ff.apply(&image,mouse.pos, ref,gui["thresh"]); // CustomCriterion(image(mouse.pos.x,mouse.pos.y,0),gui["thresh"])); dt = Time::now()-t; int val = gui["fill"]; for(unsigned int i=0;i ref = image(mouse.pos.x,mouse.pos.y); const FloodFiller::Result &res = ff.applyColor(&image,mouse.pos, ref[0], ref[1], ref[2],gui["thresh"]); dt = Time::now()-t; Color c = gui["fill"]; for(unsigned int i=0;i