前回SURFを無事有効化できたので,特徴点検出をしてみた.
c++11のコードを貼っておく.
#include <opencv2/opencv.hpp> int main(){ cv::VideoCapture cam(0); // 特徴量を選ぶ auto featureDetector = cv::FeatureDetector::create(SURF); //auto featureDetector = cv::FeatureDetector::create(ORB); //auto featureDetector = cv::FeatureDetector::create(BRISK); //auto featureDetector = cv::FeatureDetector::create(SIFT); std::cout << featureDetector->name() << std::endl; // auto descriptorExtractor = cv::DescriptorExtractor::create(SURF); while(true){ cv::Mat img; cv::Mat gimg; cv::Mat result; std::vector<cv::KeyPoint> keypoints; std::vector<float> descriptors; cam >> img; if(img.empty()) break; // グレースケール化 cv::cvtColor(img, gimg, cv::COLOR_BGR2GRAY); // 特徴点検出 featureDetector->detect(gimg, keypoints, cv::Mat()); // // 特徴量を抽出 // descriptorExtractor->compute(gimg, keypoints, descriptors); // 特徴点の描画 cv::drawKeypoints(img, keypoints, result); char key = cv::waitKey(1); cv::imshow(img, img); cv::imshow(gimg, gimg); cv::imshow(keypoints, result); if(key == 'q') break; } return 0; }
コンパイルするときは,
g++ -std=c++11 -o detect sample.cpp `pkg-config --cflags --libs opencv`