【OpenCV 例程200篇】51. 直方图处理之直方图反向追踪(cv2.calcBackProject)

『youcans 的 OpenCV 例程300篇 - 总目录』


【OpenCV 例程200篇】51. 直方图处理之直方图反向追踪(cv2.calcBackProject)

图像直方图是反映图像像素分布的统计表。 灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数。

直方图反向投影(反向追踪)是一种在输入图像中查找与特定模板图像匹配最佳的点或区域的方法,可以对特定颜色物体、特定灰度物体进行查找、跟踪,常用于图像查找、图像分割。

直方图反向投影处理的原理,是计算某一特征的直方图模型,再使用该模型去寻找图像中存在的特征。

直方图反向投影处理的过程,首先建立模板区域的直方图,再将直方图投影到输入图像,计算输入图像中每个像素点的像素值与直方图匹配概率,得到概率图像并以一定阈值进行二值化处理。

直方图的反向投影利用直方图模型计算给定图像像素点的特征。反向投影在某一位置的值是源图像在对应位置的像素值的累计。反向投影操作可实现检测输入源图像给定图像的最匹配区域,可用于目标检测。

OpenCV 提供的函数 cv2.calcBackProject() 可以用来做直方图反向投影。

函数说明:

cv2.calcBackProject(images, channels, hist, ranges, scale[, dst]) → dst

参数说明:

  • images:颜色对比度的阈值,可选项,默认值 8

  • channels: 计算反向投影的图像通道

  • hist: 查找模板区域的直方图

  • ranges:每个维度中直方图单元边界的数组

  • scale:反向投影输出的缩放比例

  • 返回值 dst:返回反向投影的输出图像


基本例程:1.64 直方图反向投影追踪

    # 1.64 直方图反向投影roi = cv2.imread("../images/BallFrag.png", flags=1)  # 查找的图像区域target = cv2.imread("../images/imgBall.png", flags=1)  # 被查找的目标图像hsvRoi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)hsvTar = cv2.cvtColor(target, cv2.COLOR_BGR2HSV)histRoi = cv2.calcHist([hsvRoi], [0, 1], None, [180, 256], [0, 180, 0, 256])  # 计算目标直方图cv2.normalize(histRoi, histRoi, 0, 255, cv2.NORM_MINMAX)  # 归一化 ->[0,255]dst = cv2.calcBackProject([hsvTar], [0, 1], histRoi, [0, 180, 0, 256], 1)  # 反向投影disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))  # 定义椭圆结构形状imgConv = cv2.filter2D(dst, -1, disc)  # 图像卷积ret, thresh = cv2.threshold(imgConv, 100, 255, 0)  # 图像二值化处理,得到掩模模板imgTrack = cv2.bitwise_and(target, target, mask=thresh)  # 以 thresh 为掩模按位与,显示查找区域plt.figure(figsize=(10,6))plt.subplot(131), plt.imshow(cv2.cvtColor(target, cv2.COLOR_BGR2RGB)), plt.title("target image"), plt.axis('off')plt.subplot(132), plt.imshow(thresh, 'gray'), plt.title("tracking mask"), plt.axis('off')plt.subplot(133), plt.imshow(cv2.cvtColor(imgTrack, cv2.COLOR_BGR2RGB)), plt.title("tracking result"), plt.axis('off')plt.show()

在这里插入图片描述

补充知识:

直方图的反向投影到底是指什么?

反向投影矩阵中某点的值就是它对应的原图像中的点所在区间的灰度直方图值。一个区间点越多,在反向投影矩阵中就越亮。

怎么理解反向投影矩阵中的 “反向”?
先求出原图像的直方图,再由直方图得到反向投影矩阵,由直方图到反向投影矩阵实际上就是一个反向的过程。

通过图像的反向投影矩阵,实际上把原图像简化了,简化过程就是提取图像特征的过程。通过特征来对比两幅图,如果两幅图的反向投影矩阵相同或高度相似,就可以判定这两幅图这个特征相同。



(本节完)

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转需】【金融干货】四步教你:开发风控模型?

一、市场调研 目前市面主流的风控模型 1、互联网金融前10名排行榜(数据截止日期2017-09-12) 互联网金融公司排名分别是蚂蚁金服、陆金所、京东金融、苏宁金融、百度金融、腾讯理财通、宜信、钱大掌柜、万达金融和网易理财。 1.1 蚂蚁金服 1.1.1 大数据技术对接第三方征信公司芝…

推箱子

推箱子小游戏原理的实现 功能分析: 1.找一张类似于箱子的图片自行设置图片的大小 2.设置控制箱子移动的四个方向的按钮 3.使用键盘控制图片上下左右的移动、 效果图演示 原始位置 点击键盘向右移动三次向下移动一次后的位置 看了上述过程是不是感觉很有意思呀&…

我的Go+语言初体验——(5)Go+ 基本语法之 Switch

我的Go语言初体验——(5)Go 基本语法之 Switch “我的Go语言初体验” | 征文活动进行中… Go 语言中提供多路分支条件语句 switch, 用于在不同条件下执行不同动作。 使用 if-else 嵌套结构也可以实现多路分支条件结构,但程序冗长…

java web 开发之写在前面(0)

java是sun公司(现在属于Oracle公司)推出的能够跨越多平台的、可以执行最高的一种面向对象的编程语言,也是目前最先进、特征最丰富、功能最强大的计算机语言。利用java可以编写桌面应用程序,web应用程序、分布式系统、嵌入式系统程…

【OpenCV 例程200篇】52. 图像的相关与卷积运算

【OpenCV 例程200篇】52. 图像的相关与卷积运算 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 滤波通常是指对图像中特定频率的分量进行过滤或抑制。图像滤波是在尽可能保留图像细节特征的条件…

java web 之 网页前端开发基础(1)

1.HTML(Hypertext Markup Language,HTML,超文本标记语言) 1.1 创建第一个HTML文件 编写html语言可以通过两种方式,一种是手工编写html代码,一种是借助一些开发软件,如Dreamweaver或者微软公司…

文本框为空按钮不可点击

在form表单的提交中判断输入框的内容是否为空,如果输入框的内容为空则按钮不可点击,只有当输入框的内容不为空时才能点击并执行之后的提交等操作。 效果图演示 输入框为空(按钮不可点击,点击无效果) 输入框不为空时…

【youcans 的 OpenCV 学习课】7. 空间域图像滤波

专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 【youcans 的 OpenCV 学习课】7. 空间域图像滤波 图像滤波是在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制,是常用的图像预处理操作。 …

java web开发之上机指导(2)

创建一个用户注册的页面,让用户输入姓名、密码、电话和邮箱,使用javascript脚本完成密码校验、电话号码校验、邮箱校验和空格内容校验。 开发步骤如下。 (1)创建一个项目名为CheckInfomation,在WebContent文件夹下创…

小程序开发之基础知识(0)

前言:2016年9月21日,微信小程序正式开启内测。 2017年1月9日0点,万众瞩目的微信第一批小程序正式上线,用户可以体验到各种各样小程序提供的服务。 人类发展史大抵经历了石器时代,青铜器与铁器时代、工业与科技时代(从第一次工业革命算起&…

鼠标悬浮改变背景颜色

将鼠标放在div上时div的背景颜色发生改变,把鼠标移走div之后,div的背景颜色回复原来的颜色。 效果图演示 没有将鼠标放在div上时(lanse) 将鼠标放在div上之后(变为红色) 下面看代码 由于代码较短&…

我的Go+语言初体验——(6)整型有理数数据类型

我的Go语言初体验——(6)整型有理数数据类型 “我的Go语言初体验” | 征文活动进行中… Go 语言使用后缀 ‘r’ 表示有理数,支持整型、分数型、浮点型三种有理数数据类型(Rational number)。 在整型有理数变量声明时&…

利用python进行数据分析之准备工作(1)

目录 一、简介 二、重要的python库 1.numpy库 2.pandas 3.matplotlib 4.IPython 5.Scipy 三、python环境安装和数据分析前的数据准备 一、简介 什么是数据?本栏目的数据主要指的是结构化的数据,通常我们使用数据这一说法来笼统地概括所有通用格式…

获取焦点改变输入框背景色

当输入框获取焦点时&#xff08;鼠标点到输入框时&#xff09;为红色&#xff0c;失去焦点时还原&#xff08;鼠标未点输入框内&#xff09;为白色。 效果图演示 没有获取焦点 获取焦点 代码演示 <!DOCTYPE html> <html><head lang"en"><…

【OpenCV 例程200篇】53. Scipy 实现图像二维卷积

【OpenCV 例程200篇】53. Scipy 实现图像二维卷积 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 滤波通常是指对图像中特定频率的分量进行过滤或抑制。图像滤波是在尽可能保留图像细节特征的条…

python基础课程1(看代码看注释)--基本操作和数据类型

python环境自行安装&#xff0c;建议安装3版本的环境。编辑器可以使用pycharm或者sublime&#xff0c;也可以在线上使用jupyterimport this #函数存在于模块中&#xff0c;我们需要先引用这个模块才能使用这个模块里的函数 print(hello,world)#单引号 print("hello,world&…

点击按钮切换图片

点击按钮时将当前显示的图片切换为指定要显示的图片 效果图演示 未点击更换图片之前显示的图片 点击更换图片之后 程序详解&#xff1a; 准备两张互相切换的图片给更换图片按钮添加点击事件把两张图片放在一个数组里点击按钮后执行判断如果是第一张图片就换成第二张&#…

【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积

【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 滤波通常是指对图像中特定频率的分量进行过滤或抑制。图像滤波是在尽可能保留图像细节特征的…

python基础课程2(看代码看注释)--条件判断|循环|函数|生成器|类

##人生苦短&#xff0c;我用python ##课程内容 #条件判断 #循环 #类&#xff1a;简单介绍类的用法##条件判断 #if condiction:# dosomething #else: # dosomething total_cost 32.5 if total_cost>30:discount 0.9 elif total_cost>20:diacount 0.95 else :disco…

【OpenCV 例程200篇】55. 可分离卷积核

【OpenCV 例程200篇】55. 可分离卷积核 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 空间滤波器是由邻域和定义的操作构成的&#xff0c;滤波器规定了滤波时采用的邻域形状及该区域内像素值的…