OpenCV マトリックスがあります。質問に記載されているように、任意のスタイルでフォーマットして印刷したいと思います。
cv::Mat1b image = cv::imread(input_name, cv::IMREAD_GRAYSCALE);
std::cout << format_in_c_style(image);
何か案は?
cv::Formatter
を明示的に作成するだけでなくcv::format()
、 を使用することもできます。これはstd::cout
直接使用でき、少し短くなります。
cv::Mat image; //Loaded from somewhere
std::cout << cv::format(image, "numpy") << std::endl;
の2番目の引数は、 brotherofkenの回答cv::format()
で言及されている文字列のいずれかです。
OpenCV バージョン 3 ではformat()
、文字列ではなく列挙型を取ります。列挙定数は、許可されている文字列値に対応しており、次のとおりです。
FMT_DEFAULT
FMT_MATLAB
FMT_CSV
FMT_PYTHON
FMT_NUMPY
FMT_C
呼び出しは上記と同様です。
std::cout << cv::format(image, cv::Formatter::FMT_NUMPY) << std::endl;
この目的のために文書化されていないcv::Formatter
クラスを使用できます。以下の例を参照してください。
cv::Mat1b const image = cv::imread(m_cl_parameters.input_name, cv::IMREAD_GRAYSCALE);
cv::Formatter const * c_formatter(cv::Formatter::get("CSV"));
c_formatter->write(std::cout, image);
cv::Formatter
使用後に取得したオブジェクトを破棄しないでくださいcv::Formatter::get(...)
。
関数cv::Formatter::get(const char* fmt)
は次の形式を処理できます。
「マットラブ」
出力例:
[120, 195, 226;
142, 138, 78;
195, 142, 226]
"CSV" - コンマ区切り値。
出力例:
120, 195, 226
142, 138, 78
195, 142, 226
「パイソン」
出力例:
[[120, 195, 226],
[142, 138, 78],
[195, 142, 226]]
「ナンピー」
出力例:
array([[120, 195, 226],
[142, 138, 78],
[195, 142, 226]], type='uint8')
"C" - C スタイルの配列を生成します
出力例:
{120, 195, 226, 142, 138, 78, 195, 142, 226}