diff --git a/src/examples/CMakeLists.txt b/src/examples/CMakeLists.txt index e8a9b1c1cc28ffa72076acd3b2e52c634e825676..ea7baea0f03707fbc6f6f31520490e5cf2c319ee 100644 --- a/src/examples/CMakeLists.txt +++ b/src/examples/CMakeLists.txt @@ -127,8 +127,8 @@ IF(OpenCV_FOUND) TARGET_LINK_LIBRARIES(test_constraint_AHP ${PROJECT_NAME}) # ORB tracker test -# ADD_EXECUTABLE(test_tracker_ORB test_tracker_ORB.cpp) -# TARGET_LINK_LIBRARIES(test_tracker_ORB ${PROJECT_NAME}) + ADD_EXECUTABLE(test_tracker_ORB test_tracker_ORB.cpp) + TARGET_LINK_LIBRARIES(test_tracker_ORB ${PROJECT_NAME}) # ORB tracker test ADD_EXECUTABLE(test_ROI_ORB test_ROI_ORB.cpp) diff --git a/src/examples/test_tracker_ORB.cpp b/src/examples/test_tracker_ORB.cpp index 34bd60a87e2565afe50e7484a669ee8be451730f..e37dda2b630b6c20f03de73e0e2913ab4896bf17 100644 --- a/src/examples/test_tracker_ORB.cpp +++ b/src/examples/test_tracker_ORB.cpp @@ -16,8 +16,8 @@ int main(int argc, char** argv) const char * filename; if (argc == 1) { -// filename = "/home/jtarraso/VÃdeos/gray.mp4"; - filename = "/home/jtarraso/Imágenes/Test_ORB.png"; + std::string video_path = "/src/examples/Test_ORB.mp4"; + filename = (_WOLF_ROOT_DIR + video_path).c_str(); capture.open(filename); } else if (std::string(argv[1]) == "0") @@ -33,19 +33,24 @@ int main(int argc, char** argv) } std::cout << "Input video file: " << filename << std::endl; if(!capture.isOpened()) std::cout << "failed" << std::endl; else std::cout << "succeded" << std::endl; - capture.set(CV_CAP_PROP_POS_MSEC, 3000); + //capture.set(CV_CAP_PROP_POS_MSEC, 3000); unsigned int img_width = capture.get(CV_CAP_PROP_FRAME_WIDTH); unsigned int img_height = capture.get(CV_CAP_PROP_FRAME_HEIGHT); std::cout << "Image size: " << img_width << "x" << img_height << std::endl; + //===================================================== + // Environment variable for configuration files + std::string wolf_root = _WOLF_ROOT_DIR; + //===================================================== - - cv::Feature2D* detector_descriptor_ptr_; - cv::DescriptorMatcher* matcher_ptr_; + //===================================================== + // Detector, descriptor and matcher + cv::Ptr<cv::FeatureDetector> detector_descriptor_ptr_; + cv::Ptr<cv::DescriptorMatcher> matcher_ptr_; unsigned int nfeatures = 500; - float scaleFactor = 1.2; + float scaleFactor = 2; unsigned int nlevels = 8; unsigned int edgeThreshold = 16; unsigned int firstLevel = 0; @@ -58,33 +63,21 @@ int main(int argc, char** argv) unsigned int roi_width = 200; unsigned int roi_heigth = 200; - detector_descriptor_ptr_ = new cv::ORB(nfeatures, // + detector_descriptor_ptr_ = cv::ORB::create(nfeatures, // scaleFactor, // nlevels, // edgeThreshold, // firstLevel, // WTA_K, // scoreType, // - patchSize);//, -// fastThreshold); - - //unsigned int nominal_pattern_radius = 0; - //unsigned int pattern_radius = (unsigned int)( (nominal_pattern_radius) * pow(scaleFactor, nlevels-1)); + patchSize);// -// std::cout << "nominal pattern radius: " << _dd_params->nominal_pattern_radius << std::endl; -// std::cout << "scale factor: " << params_orb->scaleFactor << std::endl; -// std::cout << "nlevels: " << params_orb->nlevels << std::endl; + unsigned int pattern_radius = (unsigned int)(patchSize); unsigned int size_bits = detector_descriptor_ptr_->descriptorSize() * 8; - matcher_ptr_ = new cv::BFMatcher(6); - - - - // CAPTURES -// SensorCamera* camera_ptr_; -// CaptureImage* image_ptr; - TimeStamp t = 1; + matcher_ptr_ = cv::DescriptorMatcher::create("BruteForce-Hamming(2)"); + //===================================================== unsigned int buffer_size = 20; std::vector<cv::Mat> frame(buffer_size); @@ -94,10 +87,8 @@ int main(int argc, char** argv) cv::namedWindow("Feature tracker"); // Creates a window for display. cv::moveWindow("Feature tracker", 0, 0); -// image_ptr = new CaptureImage(t, camera_ptr_, frame[f % buffer_size]); - cv::imshow("Feature tracker", frame[f % buffer_size]); - cv::waitKey(0); + cv::waitKey(1); std::vector<cv::KeyPoint> target_keypoints; std::vector<cv::KeyPoint> tracked_keypoints_; @@ -121,8 +112,6 @@ int main(int argc, char** argv) detector_descriptor_ptr_->detect(image_original, target_keypoints); detector_descriptor_ptr_->compute(image_original, target_keypoints, target_descriptors); - - while(!(frame[f % buffer_size].empty())) { f++; @@ -152,10 +141,10 @@ int main(int argc, char** argv) roi_up_left_corner.y = roi.y; //inflate -// roi.x = roi.x - pattern_radius; -// roi.y = roi.y - pattern_radius; -// roi.width = roi.width + 2*pattern_radius; -// roi.height = roi.height + 2*pattern_radius; + roi.x = roi.x - pattern_radius; + roi.y = roi.y - pattern_radius; + roi.width = roi.width + 2*pattern_radius; + roi.height = roi.height + 2*pattern_radius; //trim if(roi.x < 0) @@ -191,8 +180,6 @@ int main(int argc, char** argv) detector_descriptor_ptr_->detect(image_roi, keypoints); detector_descriptor_ptr_->compute(image_roi, keypoints, descriptors); - - cv::Mat target_descriptor; //B(cv::Rect(0,0,vec_length,1)); target_descriptor = target_descriptors(cv::Rect(0,j,target_descriptors.cols,1)); @@ -205,14 +192,12 @@ int main(int argc, char** argv) if(normalized_score < 0.8) { std::cout << "not tracked" << std::endl; -// std::cout << "choosen_descriptor:\n" << descriptors.row(cv_matches[0].trainIdx) << std::endl; } else { std::cout << "tracked" << std::endl; -// std::cout << "choosen_descriptor:\n" << descriptors.row(cv_matches[0].trainIdx) << std::endl; - matched = true; + matched = true; cv::Point2f point,t_point; point.x = keypoints[cv_matches[0].trainIdx].pt.x + roi.x; @@ -220,11 +205,6 @@ int main(int argc, char** argv) t_point.x = target_keypoints[j].pt.x; t_point.y = target_keypoints[j].pt.y; - - - - - cv::circle(image_graphics, t_point, 4, cv::Scalar(51.0, 51.0, 255.0), -1, 3, 0); cv::circle(image_graphics, point, 2, cv::Scalar(255.0, 255.0, 0.0), -1, 8, 0); cv::putText(image_graphics, std::to_string(j), point, cv:: FONT_HERSHEY_SIMPLEX, 0.4, cv::Scalar(255.0, 255.0, 0.0)); @@ -330,7 +310,7 @@ int main(int argc, char** argv) tracked_keypoints = 0; cv::imshow("Feature tracker", image_graphics); - cv::waitKey(0); + cv::waitKey(1); // f++; // capture >> frame[f % buffer_size];