是啥导致“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)”的主要内容,如果未能解决你的问题,请参考以下文章