void log4cxx_debug_dimensions(const std::string& prefix, const Dimensions& dims) { if(logger->isDebugEnabled()) { for (size_t i=0; i<dims.size(); i++) { LOG4CXX_DEBUG(logger, prefix << " dims["<<i<<"] from " << dims[i].getStartMin() << " to " << dims[i].getEndMax()); } } }
void TracingDemoModel::populateDetectedBlobs_CentroidPerNeighbourBugsGroup(const std::vector<BugCreature>& bugs, std::vector<DetectedBlob>& resultBlobs) { const float CloseBlobsDist = 7; std::vector<uchar> processedBugs(bugs.size(), false); for (size_t i = 0; i < bugs.size(); ++i) { if (processedBugs[i]) continue; processedBugs[i] = true; auto& bug = bugs[i]; float centroidX = bug.Pos.x(); float centroidY = bug.Pos.y(); int neighboursCount = 1; for (size_t j = i + 1; j < bugs.size(); ++j) { if (processedBugs[j]) continue; auto& nghBug = bugs[j]; float len = PoolWatch::sqr(nghBug.Pos.x() - bug.Pos.x()) + PoolWatch::sqr(nghBug.Pos.y() - bug.Pos.y()); len = std::sqrtf(len); if (len < CloseBlobsDist) { centroidX += nghBug.Pos.x(); centroidY += nghBug.Pos.y(); neighboursCount++; processedBugs[j] = true; } } centroidX /= neighboursCount; centroidY /= neighboursCount; const int blobW = 10; const int blobH = 10; DetectedBlob blob; blob.Id = i + 1; blob.Centroid = cv::Point2f(centroidX,centroidY); blob.CentroidWorld = cv::Point3f(centroidX, centroidY, 0); blob.BoundingBox = cv::Rect2f(centroidX - 5, centroidY-5, blobW,blobH); blob.FilledImage = cv::Mat(blobW, blobH, CV_8UC1); blob.FilledImage.setTo(255); fixBlobFilledImageRgb(bug, blobW, blobH, blob); blob.AreaPix = blobW * blobH; resultBlobs.push_back(blob); } if (log_->isDebugEnabled()) { std::stringstream bld; bld << "Found " << resultBlobs.size() << " blobs" << std::endl; for (const auto& blob : resultBlobs) bld << " Id=" << blob.Id << " Centroid=" << blob.Centroid << std::endl; LOG4CXX_DEBUG(log_, bld.str()); } }