如何以CSV,C,Python,MatLab,NumPy样式格式打印cv :: Mat

时间:2013-06-11 09:31:20

标签: c++ opencv

我有一个OpenCV矩阵。我想以问题中提到的任何风格打印格式。

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

有什么想法吗?

2 个答案:

答案 0 :(得分: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::Formattercv::Formatter::get(...)获得的对象。

函数cv::Formatter::get(const char* fmt)可以处理以下格式:

<强> “MATLAB”

输出示例:

[120, 195, 226;
 142, 138, 78;
 195, 142, 226]

“CSV” - 以逗号分隔的值。

输出示例:

120, 195, 226
142, 138, 78
195, 142, 226

<强> “PYTHON”

输出示例:

[[120, 195, 226],
 [142, 138, 78],
 [195, 142, 226]]

<强> “numpy的”

输出示例:

array([[120, 195, 226],
       [142, 138, 78],
       [195, 142, 226]], type='uint8')

“C” - 生成c风格的数组

输出示例:

{120, 195, 226, 142, 138, 78, 195, 142, 226}

答案 1 :(得分:5)

除了明确地创建cv::Formatter之外,还可以使用cv::format()std::cout可以直接与cv::Mat image; //Loaded from somewhere std::cout << cv::format(image, "numpy") << std::endl; 一起使用,并且有点短:

cv::format()

format()的第二个参数是brotherofken的答案中提到的任何字符串。

在OpenCV第3版中,FMT_DEFAULT FMT_MATLAB FMT_CSV FMT_PYTHON FMT_NUMPY FMT_C 不再使用字符串,而是使用枚举。枚举常量对应于允许的字符串值,如下所示:

std::cout << cv::format(image, cv::Formatter::FMT_NUMPY) << std::endl;

调用与上面类似:

{{1}}