OPENCV3编程入门--第九章(直方图,反向投影,模板匹配)学习笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/hh5233/article/details/98942859

1.直方图概念:常见的是灰度直方图,其实可以统计任何的图像特征,比如梯度,方向,色彩等
在这里插入图片描述
在这里插入图片描述
(1)计算直方图:calcHist()函数

在这里插入图片描述
在这里插入图片描述

 注:这里参数解释更透彻一点:

arrays  输入图像的指针,可以是多幅图像,所有的图像都必须有相同的深度( CV_8U or CV_32F),同时一幅图像可以有多个 channels

narrays  输入图像的个数

channels 计算直方图的 channels 的数组,当输入图像为多通道图像时, channels[0] = {0}, 表示的是取其第一个通道, channels[0] = {1}表示取其第二个通道,以此类推, channels[2] = {1, 2}表示的是取其第2个和第3个通道的图像 进行直方图统计

mask 掩码,如果 mask 不为空,那么它必须是一个8位(CV_8U)的数组,并且它的大小和 arrays[i] 的大小相同,值为1的点将用来计算直方图

hist 计算出来的直方图

dims 需要统计的特征的数目,计算出来的直方图的维数,直方图的维数就是图像的通道数,每一维的长度是灰度级数,一维直方图就是灰度图的直方图,直方图的尺寸是 256; 高维直方图可以理解为图像在每个维度上灰度级分布的直方图,常见的是二维 直方图,如红-蓝直方图的两个分量分别表示红光图像的灰度值和蓝光图像的灰度值的函数,其图像坐标(Dr,Db)处对应在红光图像中具有灰度级 Dr 同时在蓝光图像中具有灰度级 Db 的像素个数。

histSize 在每一维上直方图的个数,把直方图看作一个一个的竖条的话,就是每一维竖条的个数–就是后面提到的bin

ranges 用来统计的灰度值的范围

(2)寻找最大/小值:minMaxLoc()函数
在这里插入图片描述

注:三色RGB直方图的横坐标应该也是颜色等级(比如红色0-255个等级),纵坐标是个数

(3)对比直方图:compareHist() 函数
在这里插入图片描述
在这里插入图片描述
2.反向投影
概念解释:https://blog.csdn.net/viewcode/article/details/8209067
深入浅出的解释:https://blog.csdn.net/chenjiazhou12/article/details/22150421
在这里插入图片描述

(1)反向投影工作原理/概念

     假设你已经通过下图得到一个肤色直方图(Hue-Saturation), 旁边的直方图就是 模型直方图 ( 代表手掌的皮肤色调).你可以通过掩码操作来抓取手掌所在区域的直方图:

在这里插入图片描述
(3)进一步说明反向投影是什么:根据模板图像寻找匹配区域!
在这里插入图片描述
(4)计算反向投影:calcBackProject() 函数
在这里插入图片描述
例子中bin这个单位其实就是横坐标方向的条数(如下图)–直方图组距
在这里插入图片描述

(5)通道复制:mixChannels() 函数
在这里插入图片描述
<1.>关于参数fromTo的解释:https://www.cnblogs.com/ruic/p/4926254.html
在这里插入图片描述
一个输入矩阵的通道标记后面必须跟着个输出矩阵的通道标记,所以比如例子中from_to前两个元素{0,2}表示输入rgba[0]对于输出bgr[2] (其实就是红色对红色,一一对应啦)

<2>输出矩阵的向量。所有的矩阵必须事先分配空间(如用create),大小和深度须与输入矩阵等同。

3.模板匹配
(1)概念:通过在输入图像上滑动图像块(模板图像),对实际的图像块和输入图像进行匹配
在这里插入图片描述
(2)模板匹配函数:matchTemplate()
在这里插入图片描述
在这里插入图片描述

总结:

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hh5233/article/details/98942859