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::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)可以处理以下格式:

“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]]

“数字”

输出示例:

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 回答
6

除了cv::Formatter显式创建之外,还可以使用cv::format(),可以直接使用 with std::cout,而且稍微短一点:

cv::Mat image;    //Loaded from somewhere
std::cout << cv::format(image, "numpy") << std::endl;

其中第二个参数是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 回答