前回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`