void CvSIFT::onNewImage() { LOG(LTRACE)<< "CvSIFT::onNewImage\n"; try { // Input: a grayscale image. cv::Mat input = in_img.read(); std::ofstream feature_calc_time; if(!string(prop_calc_path).empty()) { feature_calc_time.open((string(prop_calc_path)+string("czas_wyznaczenia_cech_sift.txt")).c_str(), ios::out|ios::app); } Common::Timer timer; timer.restart(); //-- Step 1: Detect the keypoints. cv::SiftFeatureDetector detector(0,4); std::vector<cv::KeyPoint> keypoints; detector.detect(input, keypoints); //-- Step 2: Calculate descriptors (feature vectors). cv::SiftDescriptorExtractor extractor; Mat descriptors; extractor.compute( input, keypoints, descriptors); if(!string(prop_calc_path).empty()) { feature_calc_time << timer.elapsed() << endl; } // Write results to outputs. Types::Features features(keypoints); features.type = "SIFT"; out_features.write(features); out_descriptors.write(descriptors); } catch (...) { LOG(LERROR) << "CvSIFT::onNewImage failed\n"; } }
void BlobExtractor_Processor::onNewImage() { LOG(LTRACE) << "BlobExtractor_Processor::onNewImage() called!\n"; Common::Timer timer; timer.restart(); cv::Mat in = in_img.read(); in.convertTo(img_uchar, CV_8UC1); IplImage ipl_img = IplImage(img_uchar); // cv::Mat mat_img = img_uchar; // cv::Mat out = cv::Mat::zeros(in.size(), CV_8UC3); Types::Blobs::Blob_vector res; bool success; try { success = ComponentLabeling( &ipl_img, NULL, props.bkg_color, res ); } catch(...) { success = false; LOG(LWARNING) << "blob find error\n"; } try { if( !success ) { LOG(LERROR) << "Blob find error\n"; } else { LOG(LTRACE) << "blobs found"; Types::Blobs::BlobResult result(res); result.Filter( result, B_EXCLUDE, Types::Blobs::BlobGetArea(), B_LESS, min_size ); out_blobs.write(result); LOG(LTRACE) << "blobs written"; newBlobs->raise(); LOG(LTRACE) << "blobs sent"; // result.draw(out, CV_RGB(255, 0, 0), 0, 0); // out_img.write(in); // newImage->raise(); } LOG(LINFO) << "Blobing took " << timer.elapsed() << " seconds\n"; } catch(...) { LOG(LERROR) << "BlobExtractor onNewImage failure"; } }