如何将 2D 垫子组合成 3D 垫子?

Posted

技术标签:

【中文标题】如何将 2D 垫子组合成 3D 垫子?【英文标题】:How to combines 2D mat into a 3D one? 【发布时间】: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 【参考方案1】:

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

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

【讨论】:

以上是关于如何将 2D 垫子组合成 3D 垫子?的主要内容,如果未能解决你的问题,请参考以下文章

垫子扩展面板中的 ag 网格 / 垫子手风琴

打开垫子扩展面板正在移动对面的柱子,如何保持静止?

iplimage 图像大小与垫子大小相同吗?

如何通过另一个具有位置(索引)的垫子访问opencv中的矩阵数据

OpenCV - 如何计算垫子的对数?

如何获得选择的垫子选项的价值?