使用 OpenCV 多通道 Mat 沿通道方向访问像素

Posted

技术标签:

【中文标题】使用 OpenCV 多通道 Mat 沿通道方向访问像素【英文标题】:Access pixel along channels direction with OpenCV multichannel Mat 【发布时间】:2013-03-28 16:20:42 【问题描述】:

我有一组相同大小的图像,代表相同的对象,但有一些光线差异。我想使用所有图像逐个像素地研究这些差异。 我想将它们堆叠成一个 3d 数组,作为具有许多通道的多通道 Mat。我们可以说 (x,y) 是每个图像内像素的坐标,而 (x,y,z) 是 Mat 中第 z 个通道的 (x,y) 点的坐标。

我正在寻找一种使用 (x,y) 坐标索引平行六面体的方法,以便获取 z 方向的值数组。 换句话说,我正在寻找一种方法:

Mat 3dMat; // previously initialized as a 3d stack of images
std::vector<byte> z_values = 3dMat.z_vec(x,y); // pseudo-code to explain what I'm trying to achieve

有什么想法吗? 提前感谢您的关注。

【问题讨论】:

为什么不使用“vector 3dMat;”并推回图层。只要确定如何推回和发布数据。关于 *** 的许多问题。 【参考方案1】:

您必须创建一个数据类型,该数据类型具有您的垫子应具有的通道大小/数量。因此,您可以使用 OpenCV 类型,例如

Mat image(size,CV_8UC3);  // 3 -channel mat
cv::Point3_<uchar> val = image.at<cv::Point3_<uchar> >(row,column);

或者您创建自己的:

struct MyType uchar x,y,z; ;
MyType val = image.at<MyType>(row,column);

我不认为你可以直接使用向量类型。您可以使用指针,但这似乎不是您想要的。

【讨论】:

以上是关于使用 OpenCV 多通道 Mat 沿通道方向访问像素的主要内容,如果未能解决你的问题,请参考以下文章

《OpenCV:访问Mat图像中每个像素值》

Mat的单通道作为矩阵Opencv

opencv 单通道合并为多通道

OpenCV中对Mat的遍历访问与赋值

将两个 RGB 图像组合成一个 6 通道图像 - openCV

在 OpenCV 中从 RGB 图像访问通道的更快方法?