vector<POI> POIFinder::GetPOIsInImage(IplImage *cv_image) { //Pre-processing // Image originalImage(cv_image); // Image grayImage = originalImage.getGrayScale(); /* IplImage *gray_image = cvCreateImage(cvGetSize(cv_image),cv_image->depth, 1); if(cv_image->nChannels == 3) { cvCvtColor(cv_image, gray_image,CV_BGR2GRAY); } else cvCopyImage(cv_image, gray_image); Image grayImage(gray_image);*/ Image grayImage(cv_image); //Core algorithm vector<Blob> detectedBlobs = FindBlobs(grayImage); vector<POI> newCoordinates; for (unsigned int i = 0; i < detectedBlobs.size(); i++) { newCoordinates.push_back(POI(detectedBlobs[i].GetCentroid())); //cout << "Novo POI: " << endl; //Debug::printCvPoint2D32f(newCoordinates[newCoordinates.size()-1].getCoordinates2d()); }; return newCoordinates; }
POI POIsImageWidget::getPOIAtPosition(int x, int y) { for (unsigned int i = 0; i < _POIs.size(); i++) { if (_POIs.at(i).isPointInsideSelectionArea2d(x, y)) { return _POIs.at(i); } } return POI(-1.0f, -1.0f); }
POIvec extractPOIs(const Array2D<float> &eval, float threshold) { int w = eval.getWidth(), h = eval.getHeight(); POIvec all; for(int y=0; y<h; y++) for(int x=0; x<w; x++) if(eval[y][x] >= threshold) all.push_back(POI(x,y,eval[y][x])); std::sort(all.begin(), all.end()); return all; }