#cv::formatとは
cv::Matの中身を様々なフォーマットで出力してくれる便利関数です.
デフォルトスタイル,python,numpy,csv,c言語の配列スタイルの出力フォーマットを選択できます.
実験の結果を吐き出して,エクセルでざっくりとグラフにしたい時とかに便利です.
OpenCV3.1の公式ドキュメントはこちらからどうぞ.
出力フォーマットの設定は,2.0と3.0では違うので注意が必要です.
2.0での使用方法は,こちらに書いてあります.
2.0では,文字列での指定でしたが,3.0からはcore.hppにFormatterクラスがあり,
そこに各フォーマットの列挙子があります.
Format | OpenCV2.0 | OpenCV3.0 |
---|---|---|
default | ";" | FMT_DEFAULT |
python | "python" | FMT_PYTHON |
numpy | "numpy" | FMT_NUMPY |
csv | "csv" | FMT_CSV |
C | "c" | FMT_C |
MATLAB | 未対応 | FMT_MATLAB |
以下にサンプルです.
テスト画像からSURF特徴量を取得して,特徴記述子の中身をCSVファイルに書き出しています.
#include<iostream>
#include<vector>
#include<fstream>
#include"OpenCV31.h" //opencvのインクルード
using namespace std;
using namespace cv;
int main(int argv,char **argc)
{
cv::Mat img = cv::imread("test1.png",cv::IMREAD_GRAYSCALE);
Ptr<cv::xfeatures2d::SIFT> sift = cv::xfeatures2d::SIFT::create();
vector<KeyPoint> keyp;
cv::Mat desc;
sift->detectAndCompute(img, cv::Mat(), keyp, desc);
ofstream ofs("sift.csv");
ofs << cv::format(desc, cv::Formatter::FMT_CSV) << endl;
cv::imshow("src", img);
cv::waitKey();
return 0;
}
これを知るまでforループでがりがり書いて出力してました・・・
以上です.