我有一组图像具有相同的大小并代表相同的对象,但有一些光差异。我想用所有图像逐像素地研究这些差异。 我想将它们堆叠成一个三维数组,作为一个有多个通道的多通道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
有什么想法吗? 提前感谢您的关注。
答案 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);
我认为你不能直接使用矢量类型。你可以使用指针,但这似乎不是你想要的。