在 OpenCV C 中打印出(Mat)矩阵的值

新手上路,请多包涵

我想使用 cout 将 OpenCV 中的矩阵值转储到控制台。我很快了解到我对 OpenvCV 的类型系统和 C++ 模板的了解不足以完成这个简单的任务。

请读者发布(或指向我)一个打印 Mat 的小函数或代码片段吗?

问候,亚伦

PS:使用较新的 C++ Mat 接口而不是较旧的 CvMat 接口的代码是优先的。

原文由 ahoffer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

如果您使用的是 opencv3,则可以像 python numpy style 一样打印 Mat:

 Mat xTrainData = (Mat_<float>(5,2) << 1, 1, 1, 1, 2, 2, 2, 2, 2, 2);

cout << "xTrainData (python)  = " << endl << format(xTrainData, Formatter::FMT_PYTHON) << endl << endl;

输出如下,您可以看到它更具可读性,请参阅 此处 了解更多信息。

在此处输入图像描述

但大多数情况下,不需要输出 Mat 中的所有数据,可以按行范围输出,如 0 ~ 2 行:

 #include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <iostream>
#include <iomanip>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    //row: 6, column: 3,unsigned one channel
    Mat image1(6, 3, CV_8UC1, 5);

    // output row: 0 ~ 2
    cout << "image1 row: 0~2 = "<< endl << " "  << image1.rowRange(0, 2) << endl << endl;

    //row: 8, column: 2,unsigned three channel
    Mat image2(8, 2, CV_8UC3, Scalar(1, 2, 3));

    // output row: 0 ~ 2
    cout << "image2 row: 0~2 = "<< endl << " "  << image2.rowRange(0, 2) << endl << endl;

    return 0;
}

输出如下:

在此处输入图像描述

原文由 Jayhello 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题