【问题标题】:How to combines 2D mat into a 3D one?如何将 2D 垫子组合成 3D 垫子?
【发布时间】:2015-11-25 15:34:31
【问题描述】:

这是我的问题,我有 8 张 100*100 的垫子灰度图像, 我想将它们组合成一个 3d 矩阵,如 100*100*8;

这是我的代码:(8个垫子从img1命名为img8,大小相同为100*100,像素值为double

int sz[3] = {img1.rows,img1.cols,8};
Mat m(3,sz, CV_8UC1, Scalar::all(0));
m.at<double>(m.rows,m.cols,1)=img1;

我认为这段代码可以将 img1 放入 3d 矩阵 100*100*8 的第一个平面,但随后出现错误:

该类型无法从 MAT 转换为 double。

我该如何解决这个问题?

【问题讨论】:

  • 为什么需要这个 3d 图像? OpenCV 对 N 维图像的支持不是很好。您可以这样做,但使用起来并不容易。你确定 std::vector&lt;Mat1b&gt; 还不够吗?
  • 哇,你能告诉我如何使用 std::vector 吗?我需要这个,因为我想让 10 个垫子成为一个循环。 like : for (i=0;i
  • 检查this

标签: c++ opencv


【解决方案1】:

你必须先将double类型的矩阵转换成uchar矩阵,可以这样做:

cv::Mat img1u;
img1.convertTo(img1u);
m.at<double>(m.rows,m.cols,1)=img1u;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2021-11-09
    • 2013-04-26
    • 2023-03-05
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多