【发布时间】:2013-06-11 09:31:20
【问题描述】:
我有一个 OpenCV 矩阵。我想以问题中提到的任何样式打印它。
cv::Mat1b image = cv::imread(input_name, cv::IMREAD_GRAYSCALE);
std::cout << format_in_c_style(image);
有什么想法吗?
【问题讨论】:
我有一个 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;
cv::format() 的第二个参数是brotherofken 的答案中提到的任何字符串。
在 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::get(...) 获得的cv::Formatter 对象。
函数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}
【讨论】: