【问题标题】:Access pixel along channels direction with OpenCV multichannel Mat使用 OpenCV 多通道 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;”并推回图层。只要确定如何推回和发布数据。关于 stackoverflow 的许多问题。

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


【解决方案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);

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

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 2011-09-17
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2011-12-15
    • 2023-03-30
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多