自动检测图像中的主要强度区域

时间:2017-10-16 12:26:30

标签: c++ opencv image-processing

我需要一些帮助来检测图像的主要强度区域。假设我有以下图像,我喜欢自动检测主导强度区域并找到该主要区域的平均/平均强度值。

这里,在图像-1中,主要强度区域是具有浅灰色的区域,而在图像-2中,主要区域是具有深灰色的区域。如何检测这些图像中的主要区域并找到主要区域的平均强度值。

图片-1:enter image description here Image-2:enter image description here

任何建议都会有所帮助!

更新:我使用以下代码获取Image-2的直方图。图-3显示了直方图。现在,我需要找出哪个bin包含大部分值,即直方图的模式。但是,无法弄清楚如何使用大部分值来计算bin。

图-3:enter image description here

double minVal=0, maxVal=0; int minIdx, maxIdx;

    minMaxIdx(hist,&minVal,&maxVal, &minIdx, &maxIdx);
    cout<<"Max:"<<maxVal<<endl;


    cout<<"MaxIdx:"<<maxIdx<<endl;

更新-2:终于工作了!我做了以下操作来获取直方图的最大bin的位置和值。

TabNavigator

MaxIdx给出直方图最高区间的位置,并且是图像的主要强度值!

1 个答案:

答案 0 :(得分:2)

你所追求的是强度直方图的模式(频率最高的垃圾箱)。它直接告诉你平均强度。

对于给定的图像,直方图由两个非常尖锐的峰组成。

在一些不好的情况下,主峰可以分布在几个次峰上。在这种情况下,您需要在采用模式之前对直方图应用平滑处理。

查看第一个和第二个最大值的相对高度可能很有趣,以检查颜色的主导程度。