#include "FloodFillAlgorithm.h" FloodFillAlgorithm::~FloodFillAlgorithm() { } void FloodFillAlgorithm::flood(Point startPoint, Scalar tgtColor, Scalar loDiff) { floodFill(*image, startPoint, tgtColor, 0, loDiff); } void FloodFillAlgorithm::flood(Point startPoint, Mat* tgtMat) { if (!insideImage(startPoint)) return; Vec3b srcColor = image->at(startPoint); if (image->at(startPoint) == srcColor) { queue pointQueue; pointQueue.push(startPoint); while (!pointQueue.empty()) { Point p = pointQueue.front(); pointQueue.pop(); if (insideImage(p)) { if ((image->at(p) == srcColor)) { image->at(p) = tgtMat->at(p); pointQueue.push(Point(p.x + 1, p.y)); pointQueue.push(Point(p.x - 1, p.y)); pointQueue.push(Point(p.x, p.y + 1)); pointQueue.push(Point(p.x, p.y - 1)); } } } } } bool FloodFillAlgorithm::insideImage(Point p) { return (p.x >= 0) && (p.x < image->size().width) && (p.y >= 0) && (p.y < image->size().height); }