【问题标题】:How to creat a 3-d matrix using Mat如何使用 Mat 创建 3d 矩阵
【发布时间】:2022-07-05 07:26:35
【问题描述】:

我想用这些代码创建一个 3-d 矩阵

int size[3] = { 100, 100,100};
cv::Mat mat3D(3, size, CV_8UC1, cv::Scalar(0));

但是在我调试我的代码之后,我发现 好像我没有得到正确的矩阵,有什么问题?

【问题讨论】:

标签: c++ opencv mat


【解决方案1】:

您的代码似乎没问题,也许调试器误解了。

这段代码很好地显示了 24 个元素(我更改了维度以具有更小的矩阵)

 int size[3] = { 2, 3, 4};
cv::Mat mat3D(3, size, CV_8UC1, cv::Scalar(0));
std::cout << "Total size " << mat3D.size << std::endl;
int counter = 0;
for(cv::MatConstIterator_<uchar> it = mat3D.begin<uchar>(); it != mat3D.end<uchar>(); ++it){
    std::cout << " " << (int) *it;
    counter ++;
}
std::cout << std::endl;
std::cout << counter << " elts" << std::endl;

【讨论】:

  • 感谢您的帮助
【解决方案2】:

你的代码是正确的。

关于您的调试器输出,在处理多维 cv::Mat 时,这是预期的行为。 The OpenCV documentation for cv:Mat::rows 读作:“行数和列数,或者当矩阵有超过 2 个维度时为 (-1, -1)”。实际上,您的调试器会显示通道 x 行 x 列 (1 x -1 x -1) 的值。

你可以试试这个枚举一些cv::Mat相关的属性:

    std::cout
        << "dims       : " << mat3D.rows
        << "\nchannels() : " << mat3D.channels()
        << "\nrows       : " << mat3D.rows
        << "\ncols       : " << mat3D.cols
        << "\nsize()     : " << mat3D.size()
        << "\nsize       : " << mat3D.size;

你的输出应该是:

dims       : 3
channels() : 1
rows       : -1
cols       : -1
size()     : [-1 x -1]
size       : 1000 x 100 x 100

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多