3

OpenCV マトリックスがあります。質問に記載されているように、任意のスタイルでフォーマットして印刷したいと思います。

cv::Mat1b image = cv::imread(input_name, cv::IMREAD_GRAYSCALE);
std::cout << format_in_c_style(image);

何か案は?

4

2 に答える 2

6

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;
于 2013-06-11T20:32:26.207 に答える
6

この目的のために文書化されていない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}
于 2013-06-11T09:31:20.243 に答える