在 calchist opencv 中选择频道

Posted

技术标签:

【中文标题】在 calchist opencv 中选择频道【英文标题】:selecting channels in calchist opencv 【发布时间】:2012-12-25 07:52:36 【问题描述】:

我有计算 hsv 和 yuv 图像直方图的代码。当我试图获得仅对应于亮度的值时,我想要来自 hsv 图像的“v”通道值和来自 yuv 图像的亮度(“y”)通道值。这是我使用的代码。

    int channels[] = 0;
    calcHist(&src_yuv,1,channels,Mat(),hist,1,histSize,ranges,true,false);

此示例代码适用于 yuv。我只是将 0 更改为 2 以从 HSV 获取“v”通道值。我得到了某些结果,但不确定是否选择了正确的渠道。你能帮我看看这些数字是否选择了我想要的确切频道吗?提前致谢

【问题讨论】:

docs.opencv.org/modules/imgproc/doc/histograms.html 的哪一部分让你感到困惑? 原谅我的无知。我通读了它并根据它开发了我的代码。但我不确定是否仅将频道命名为 2 会为我获得“v”频道。文档说它将获得通道 0 和 1,但没有具体说明是否获得色调和饱和度,即 0,1。如果问题非常初级,请原谅我。 在 OpenCV 中这样做实际上是有问题的,因为它不能保证存储此类信息。基本上,你必须设法自己跟踪它。 【参考方案1】:

要绝对确定频道号X 与您所关注的频道相对应,请参阅IPL Image structure 的channelSeq 属性。如果channelSeq[X] 给出了您所搜索的频道的名称(一个字符),那么您就找到了。

但是,鉴于此属性的记录方式(以及其他有趣的属性),即使您一直使用IPLImage,也无法保证其中包含的信息是准确的。因此,要绝对确定图像中的通道序列,您必须信任转换规范并自己记住这一点。因此,如果您从BGR 中的图像开始并使用BGR2YUV 进行转换,那么您相信Y 通道是第一个通道,依此类推。如果 OpenCV 曾经将 BGR2YUV 更改为意味着 Y 进入最后一个频道,以此类推,那么对你来说太糟糕了。

【讨论】:

以上是关于在 calchist opencv 中选择频道的主要内容,如果未能解决你的问题,请参考以下文章

Opencv中直方图函数calcHist

OpenCV 错误:使用 calcHist 断言失败

使用 OpenCV 官方 Matlab 绑定 cv.calcHist

OpenCV 学习笔记(颜色直方图计算 calcHist)

利用OpenCV的函数calcHist()计算出图像的直方图数据后绘制图像的直方图

利用OpenCV的函数calcHist()计算出图像的直方图数据后绘制图像的直方图