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

时间:2013-03-28 16:20:42

标签: c++ visual-c++ opencv image-processing

我有一组图像具有相同的大小并代表相同的对象,但有一些光差异。我想用所有图像逐像素地研究这些差异。 我想将它们堆叠成一个三维数组,作为一个有多个通道的多通道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

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

1 个答案:

答案 0 :(得分:0)

您必须创建一个数据类型,其中包含您的mat应具有的通道大小/数量。因此,您可以使用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);

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

相关问题