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

Posted

技术标签:

【中文标题】是啥导致“OpenCV(4.0.1)错误:断言失败(m.dims <= 2)”【英文标题】:What causes "OpenCV(4.0.1) Error : Assertion failed(m.dims <= 2)"是什么导致“OpenCV(4.0.1)错误:断言失败(m.dims <= 2)” 【发布时间】:2019-01-08 14:34:30 【问题描述】:

是什么导致了这个错误?

OpenCV:调用终止处理程序!最后一个 OpenCV 错误是: OpenCV(4.0.1)错误:断言失败(m.dims

#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);

【问题讨论】:

您最多可以cout 2 个维度。这里有 3 个维度。如果您想要 3 通道图像,为什么不简单:Mat obj(rows, cols, CV_8UC1, Scalar::all(0)),或者更好:Mat3b obj(rows, cols, Vec3b(0,0,0)) @Miki:我只是从教程中随机学习here。所以它不适用于特定的实际项目。 【参考方案1】:

这个错误在这一行:

cout << obj << endl;

OpenCV,只会尝试输出 2D 图像(如果 3D 有超过 1 个通道,可能会太难)。

一种可能的解决方法是:

  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]

另一种可能性是创建一个自制的打印函数,它获取矩阵并绘制它。

【讨论】:

以上是关于是啥导致“OpenCV(4.0.1)错误:断言失败(m.dims <= 2)”的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致此 BadDeviceToken 响应?

是啥导致了这个推进错误?

是啥导致了 NSInvalidArgumentException?

是啥导致移动构造函数被删除

是啥导致系统发出蜂鸣声?

是啥导致 opensuse Docker 膨胀?