Opencv如何使用MatIterator迭代具有浮点RGB值的彩色图像?

Posted

技术标签:

【中文标题】Opencv如何使用MatIterator迭代具有浮点RGB值的彩色图像?【英文标题】:Opencv how to use MatIterator to iterate on color image with float RGB value? 【发布时间】:2014-09-30 21:02:37 【问题描述】:

我正在学习使用opencv对Mat进行迭代,正如教程所说,我们可以使用MatIterator_来迭代Mat。对于 3 通道 uchar 图像,我们可以使用 MatIterator_<Vec3b> 如下:

MatIterator_<Vec3b> it, end;
for( it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; ++it)

      //do any iteration stuff

但我不确定它是否适用于 3 通道浮点值 (32FC3) Mat?

Vec3b的确切定义是什么?

谢谢!

【问题讨论】:

【参考方案1】:

改用Vec3f 会很好地工作:

MatIterator_<Vec3f> it, end;
for( it = I.begin<Vec3f>(), end = I.end<Vec3f>(); it != end; ++it)

      //do any iteration stuff

原因是Vec3fVec3b共享similar structure:

typedef Vec<uchar, 3> Vec3b;
typedef Vec<float, 3> Vec3f;

【讨论】:

以上是关于Opencv如何使用MatIterator迭代具有浮点RGB值的彩色图像?的主要内容,如果未能解决你的问题,请参考以下文章

列异常的 Img MatIterator<T>

在 OpenCV 中应用蒙版

如何使用具有面部特征的 openCV 训练支持向量机(svm)分类器?

opencv“向量迭代器不兼容”

OpenCV 3.0 线迭代器

OpenCV 矩阵运算是不是比简单的循环迭代更快?