前提・実現したいこと
お世話になります。
特徴点抽出の方法としてfast法を使っているのですが、keypoint内にある特徴点の座標を
別ファイルに記録したいと思っているのですがうまくいきません。
例えば、以下のプログラムで座標を表示しようとする場合どうすればよいかご助言お願いします。
https://www.cresco.co.jp/blog/entry/5504/にあるようなkeypointの展開結果を出したいと思っています。
発生している問題・エラーメッセージ
可変長引数をどうやったら表示させれるのかがわからないです。
Cannot pass non-trivial object of type 'std::vector<cv::KeyPoint>'to variadic function; expected type from format string was 'int'
該当のソースコード
C++
1int main(int argc, char *argv[]) 2{ 3 FILE *fp; 4 /*ここにkeypointの中身を記述したい*/ 5 if ((fp = fopen("/Users/name/Desktop/datalist.txt", "w")) == NULL) { 6 printf("file open error!!\n"); 7 exit(EXIT_FAILURE); 8 } 9 cv::Mat img = cv::imread("lenna.png", 1); 10 if(img.empty()) return -1; 11 12 cv::Mat gray_img; 13 cv::cvtColor(img, gray_img, CV_BGR2GRAY); 14 cv::normalize(gray_img, gray_img, 0, 255, cv::NORM_MINMAX); 15 16 std::vector<cv::KeyPoint> keypoints; 17 std::vector<cv::KeyPoint>::iterator itk; 18 19 auto detector=cv::FastFeatureDetector::create(70,false); 20 detector->detect(gray_img, keypoints); 21 fprintf(fp,"%d",keypoints); //ここでエラー 22 cv::Scalar color(100,255,100); 23 for(itk = keypoints.begin(); itk!=keypoints.end(); ++itk) 24 { 25 cv::circle(img, itk->pt, 1, color, -1); 26 cv::circle(img, itk->pt, itk->size, color, 1, CV_AA); 27 if(itk->angle>=0) 28 { 29 cv::Point pt2(itk->pt.x + cos(itk->angle)*itk->size, itk->pt.y + sin(itk->angle)*itk->size); 30 cv::line(img, itk->pt, pt2, color, 1, CV_AA); 31 } 32 } 33 34 fclose(fp); 35 cv::namedWindow("FAST Features",CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO); 36 cv::imshow("FAST Features", img); 37 cv::waitKey(0); 38}
試したこと
ディスクリプタ抽出でいけるのかもと思い、そちらの方もやってみましたがどれをつかえばいいのかわからず、取り敢えず上のような方法でやってみた次第です。
補足情報(FW/ツールのバージョンなど)
MacOS 10.12.6
opencv 3.4.1
xcode 8.3.3
ソースコードのURL http://opencv.jp/cookbook/opencv_img.html#id44
回答1件
あなたの回答
tips
プレビュー