是什么原因导致“ OpenCV(4.0.1)错误:断言失败(m.dims <= 2)”

时间:2019-01-08 14:34:30

标签: c++ opencv

什么原因导致此错误?

  

OpenCV:终止处理程序被调用!最后一个OpenCV错误是:   OpenCV(4.0.1)错误:断言失败(m.dims <= 2)在   cv :: FormattedImpl :: FormattedImpl,文件c:\ build \ master_winpack-   构建-win64-vc15 \ opencv \ modules \ core \ src \ out.cpp,第87行

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

void main()
{

    int ordo[3] = { 2, 2, 2 };
    Mat obj(3, ordo, CV_8UC1, Scalar::all(0));
    cout << obj << endl;
    waitKey(0);
}

1 个答案:

答案 0 :(得分:1)

此错误在此行:

cout << obj << endl;

OpenCV,将仅尝试输出2D图像(如果3D具有多个通道,则3D可能太难了)。

可能的解决方法是:

  int ordo[3] = { 2, 2, 2 };
  cv::Mat obj(2, 2, CV_8UC2, cv::Scalar::all(0));
  std::cout << obj << std::endl;

允许并打印以下内容:

[  0,   0,   0,   0;
   0,   0,   0,   0]

前2个数字是第一个“像素”。您可以像执行以下操作轻松访问x,y,z坐标:

// obj.at<cv::Vec2b>(y, x)[z] = uchar value
obj.at<cv::Vec2b>(1, 0)[0] = 255;

将打印出以下内容:

[  0,   0,   0,   0;
 255,   0,   0,   0]

另一种可能性是创建一个自制的打印功能,该功能可以提取矩阵并将其绘制。