【发布时间】:2016-02-05 15:09:40
【问题描述】:
我有一个 3 通道 Mat 图像,类型是 CV_8UC3。
我想在一个循环中比较一个像素与其邻居的强度值,然后设置0 或1 是否邻居更大。
我可以拨打Img.at<Vec3b>(x,y) 获得强度。
但我的问题是:如何比较两个Vec3b?
我是否应该比较每个通道(BGR 或Vec3b[0]、Vec3b[1] 和Vec3b[2])的像素值,然后将三个通道结果合并到一个Mat 对象中?
【问题讨论】:
-
是的,您需要分别比较 3 个频道。
-
intensity 是单个值(因此您的矩阵是单通道),而不是 BGR 三元组。那么,你想比较什么?
-
我想比较一下CV_8UC3所代表的强度。
-
所以要分别比较每个通道的强度?也许在 3 个频道中取最大值?或者您想在
Vec3b上定义一个比较操作,以便您可以比较它们?这完全取决于您,以及您需要做什么。如果您澄清您的最终目标是什么,我们可以提供明确的答案。 -
另外,您可以在 RGB 颜色空间的所有三个通道上独立执行普查变换,然后将结果连接在一起。存储人口普查值所需的位数将是灰度图像的三倍。即在 3x3 人口普查窗口的情况下,该值将是 3*2^3 = 24 位。
标签: c++ opencv image-processing mat