gpt4 book ai didi

c++ - 如何在 OpenCV 中用零填充矩阵?

转载 作者:IT老高 更新时间:2023-10-28 12:52:20 32 4
gpt4 key购买 nike

下面的代码会导致异常。为什么?

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

using namespace cv;
using namespace std;

void main() {

try {
Mat m1 = Mat(1,1, CV_64F, 0);
m1.at<double>(0,0) = 0;
}
catch(cv::Exception &e) {
cerr << e.what() << endl;
}

}

错误如下:

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3
) - 1))*4) & 15) == elemSize1()) in unknown function, file %OPENCV_DIR%\build\include\opencv2\core\mat.hpp, line 537

更新

如果跟踪这段代码,我看到构造函数行调用构造函数

inline Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step)

为什么?这个原型(prototype)有 5 个参数,而我提供了 4 个参数。

最佳答案

How to fill Matrix with zeros in OpenCV?

要用零填充预先存在的 Mat 对象,您可以使用 Mat::zeros()

Mat m1 = ...;
m1 = Mat::zeros(1, 1, CV_64F);

要初始化 Mat 使其仅包含零,您可以将值为 0 的标量传递给构造函数:

Mat m1 = Mat(1,1, CV_64F, 0.0);
// ^^^^double literal

您的版本失败的原因是传递 0 作为第四个参数匹配采用 void* 的重载优于采用标量的重载。

关于c++ - 如何在 OpenCV 中用零填充矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17041758/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com