2013-03-28 49 views
0

我有一组具有相同大小和代表相同对象但具有一些光线差异的图像。我想要使​​用所有图像以像素为单位研究这些差异。 我想将它们堆叠成一个3D阵列,作为多通道的多通道Mat。我们可以说(x,y)每个图像中像素的坐标,以及(x,y,z)Mat中第z个通道的(x,y)点的坐标。使用OpenCV多通道沿通道方向访问像素Mat

我正在寻找一种方法来索引使用(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

为什么不是“vector 3dMat;”并推回图层。只要确保如何推送和发布数据。关于stackoverflow的许多问题。 – William

回答

0

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

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