OpenCV中的直方图表示与操作
1. OpenCV中直方图的表示
在OpenCV里,直方图以数组形式呈现,采用的数组结构和其他数据所用的相同。你可以使用 cv::Mat 来处理一维或二维数组(一维数组形式为N × 1或1 × N),也能运用 vector<> 类型或者稀疏矩阵。虽然底层数据结构一样,但数组在直方图情境下的解读有所不同。对于n维数组,它可看作n维的直方图区间数组,其中每个元素的值代表该区间的计数数量。
区间编号只是数组的索引,是简单的整数,而区间所代表的含义和其整数索引是分开的。在处理直方图时,你需要在测量值和直方图区间索引之间进行转换。例如,一个表示人体重量的直方图,可能有20 - 40、40 - 60、60 - 80和80 - 100千克这些区间,这些重量是区间代表的值,而区间索引分别是0、1、2和3。很多OpenCV函数会帮你完成这个转换任务。
当处理高维直方图时,大部分区间的计数值可能为零。 cv::SparseMat 类很适合处理这种情况,实际上,它的存在主要就是为了处理直方图。大部分适用于密集数组的基本函数也适用于稀疏数组,但接下来会介绍一些重要的例外情况。
2. cv::calcHist(): 从数据创建直方图
cv::calcHist() 函数用于从一个或多个数据数组计算直方图的区间值。要注意,直方图的维度和输入数组的维度及大小无关,而是和输入数组的数量有关。直方图的每个维度代表对输入数组某一通道中所有像素值的计数和区间划分。你不必使用每个图像的所有通道,可以选择传递给 c
超级会员免费看
订阅专栏 解锁全文
1246

被折叠的 条评论
为什么被折叠?



