如何定义和使用用户类型的opencv mat

时间:2013-07-08 04:38:38

标签: c++ windows opencv

我的问题与a cv::Mat of std::vector ... how do I?

类似

我需要一个矩阵,其中每个元素都是std :: vector。该矩阵是对一系列相同尺寸的图像(如视频)进行的计算输出。许多计算是典型的cv函数(转换为灰度,盒式滤波器等),然后将像素的值添加到矢量中。我不知道手头有多少图像,无论如何,我不能使用通道概念,因为图像可能超过512个。

其中一个建议的答案是使用指针垫。因此,如果我尝试以下操作,它会起作用吗?

这将在Windows机器上,我理解指针大小INT-PTR 64位宽。然后我可以使用CV_64,但只定义了CV_64F。由于我不会使用此矩阵进行任何计算,我可以使用它来存储指针。我想在读取第一个图像之前,我将获得大小,创建此矩阵,使用“new std :: vector”为每个像素创建向量并将该指针存储在元素中。在我计算的循环中,我使用相同的访问偏移来读取原始图像并将输出存储在向量中。当我完成向量时,我需要在释放cv :: mat之前删除它们。

我感谢那些了解更多关于opencv的人的意见 - 这真的来自第一个使用opencv的应用程序。

1 个答案:

答案 0 :(得分:2)

尝试

cv::Mat_<your_type>

http://docs.opencv.org/modules/core/doc/basic_structures.html#id7

特别是:

To use Mat_ for multi-channel images/matrices, pass Vec as a Mat_ parameter 

这是一个很好的例子,您可以使用Vec自己的“混合” (假设每个元素的数组/向量的大小是固定的),或者如果你真的需要,可以使用std::vector