首页 > 编程语言 >Lnton羚通视频分析算法平台OpenCV-Python直方图反向投影教程

Lnton羚通视频分析算法平台OpenCV-Python直方图反向投影教程

时间:2023-09-01 15:36:50浏览次数:53  
标签:Python 投影 cv2 OpenCV 直方图 反向 图像 ground

OpenCV Python 直方图 反向投影

用于图像分割和查找感兴趣目标。简单的说,会创建一个与输入图像同样大小的图像(单通道),每个像素对应像素属于目标的概率。更简单的说就是,输出图像在感兴趣的目标处更白。常常与 camshift 算法一起使用,用于目标跟踪(查找目标)

如何使用呢?创建一个图像的直方图,包含了感兴趣目标,目标必须尽可能充满图像,效果会更好。颜色直方图优于灰度直方图,因为对象的颜色比其灰度强度更适合定义对象。然后,我们反向投影这个直方图去测试图像上查找这个目标。换句话说,我们计算每个像素属于地面的概率并显示它,结果显示我们需要的地面。

Lnton羚通视频分析算法平台OpenCV-Python直方图反向投影教程_反向投影

import numpy as np 
import cv2 

img = cv2.imread("assets/messi5.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

ground_patch = cv2.imread("assets/messi_ground.png")
ground_hsv = cv2.cvtColor(ground_patch, cv2.COLOR_BGR2HSV)

# 计算目标的直方图
ground_hist = cv2.calcHist([ground_hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

# 归一化
cv2.normalize(ground_hist, ground_hist, 0, 255, cv2.NORM_MINMAX)

# 反向投影
dst = cv2.calcBackProject([hsv], [0, 1], ground_hist, [0, 180, 0, 256], 1)

# 对投影图像做一些处理
ele = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
cv2.filter2D(dst, -1, ele, dst)
ret, thresh = cv2.threshold(dst, 50, 255, cv2.THRESH_BINARY)

# threshcolor = cv2.merge((thresh, thresh, thresh))
threshcolor = cv2.cvtColor(thresh, cv2.COLOR_GRAY2BGR)

result = cv2.bitwise_and(threshcolor, img)
result = np.hstack((img, threshcolor, result))

cv2.imshow("result", result)
# cv2.imshow("src", img)
cv2.imshow("patch", ground_patch)
cv2.waitKey(0)
cv2.destroyAllWindows()

计算直方图的反向投影,其中一个参数是目标的直方图,是需要查找的目标。目标的直方图在传入之前需要归一化,返回一个概率图。然后用个特殊的核进行卷积,并进行阈值化。

images: 输入图像数组,是一个list

channels: 用于计算反向投影的通道,必须与待计算直方图通道来源一致;

hist: 输入的直方图(待检目标的直方图)

ranges: 与 calcHist 意思相同

scale: 可选参数,越大越精确

Lnton 羚通直方图反向投影可以用于目标跟踪、图像分割和图像识别等任务。它对颜色特征敏感,适用于处理具有明显颜色分布的图像。

在实际应用中,OpenCV 是一个流行的计算机视觉库,提供了直方图反向投影的实现方法和函数。您可以使用 OpenCV 中的 cv2.calcBackProject() 函数来进行直方图反向投影的计算和处理。

Lnton羚通视频分析算法平台OpenCV-Python直方图反向投影教程_反向投影_02

标签:Python,投影,cv2,OpenCV,直方图,反向,图像,ground
From: https://blog.51cto.com/LNTON/7323310

相关文章

  • # yyds干货盘点 # 分享一个Python字符串替换的基础题目(上篇)
    大家好,我是皮皮。一、前言前几天在Python最强王者群【莫生气】问了一个Python字符串基础处理的问题,一起来看看吧。二、实现过程这里大家对于strip()函数理解不深刻的话,很容易犯迷糊,这里答案就是输出一个字符c。因为strip会把参数ab分开来一个个的删除,如果是strs.strip('abc')会把整......
  • Python运算符及其优先级顺序总结
    Python是一种被广泛使用的高级编程语言,它简单易学、功能强大,在Python语言中,运算符用于执行各种数学和逻辑运算的符号,不同运算符的优先级也各不相同,今天老男孩教育小编就带大家了解一下,请看下文:1、括号运算符(())括号运算符具有最高的优先级,它用于改变表达式的计算顺序......
  • Python的字符串操作——总结
    总结:1.f"{变量}" 格式化一个字符串2.索引和切片:  索引:从0开始的.[]  切片:s[start:end:step],end位置的数据永远拿不到3.相关操作:  字符串操作对原字符串是不发生改变的.  1.upper()在需要忽略大小写的时候  2.strip()可以去掉字符串左右......
  • Python 类的高级特性和使用方法
    Python是一种面向对象的编程语言,类是Python中最基本的面向对象概念之一。在创建类时,我们可以通过一些高级特性和使用方法来扩展类的功能和行为。本文将介绍一些常见的Python类高级特性,并提供具体的实例来说明其用法。继承继承是Python面向对象编程中一个非常重要的概念。......
  • 分享一个Python字符串替换的基础题目(上篇)
    大家好,我是皮皮。一、前言前几天在Python最强王者群【莫生气】问了一个Python字符串基础处理的问题,一起来看看吧。二、实现过程这里大家对于strip()函数理解不深刻的话,很容易犯迷糊,这里答案就是输出一个字符c。因为strip会把参数ab分开来一个个的删除,如果是strs.strip('abc......
  • 【Python】- 装饰器
    装饰器通过一个简单的装饰器示例来展示装饰器的特性及本质:python_decorator.pydefmy_decorator(func):defwrapper(*args,**kwargs):print("Beforefunctioniscalled")result=func(*args,**kwargs)#调用原始函数print(f'funcresult......
  • 一个python 类 通常有哪几部分组成
    一个Python类通常包含以下几个部分:类的声明:使用class关键字来声明类,后跟类名称和一个冒号。初始化方法__init__:定义一个特殊的方法__init__来初始化对象,并设置初始属性值。这个方法在创建对象时自动调用。属性:定义类的属性(变量),可以是类属性或实例属性,以及它们的默......
  • Lnton羚通视频分析算法平台OpenCV-Python教程 图像变换(频域变换)
     频域变换是一种将信号从时间域表示转换为频率域表示的方法。它可以帮助我们理解信号的频率成分以及进行信号处理和分析。常见的频域变换方法包括傅里叶变换(FourierTransform)和离散傅里叶变换(DiscreteFourierTransform,DFT)。以下是它们的简要介绍:傅里叶变换(FourierTransform):......
  • Python下载_Python免费版下载「编程工具」中文版介绍
    Python具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用。Python的名字来源于一个喜剧,也许最初设计Python这种语言的人并没有想到今天它会在工业和科研上获得如此广泛的使用。著名的自由软件作者EricRaymond在他的文章《如何成为一名黑客》中,将Python列为黑客应当学习的......
  • Python-3.10.5学习笔记
     Linux系统-部署-运维系列导航pip源初始化pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/simplepipconfigsetinstall.trusted-hostpypi.tuna.tsinghua.edu.cn VSCode插件安装语法检查flake8代码格式化yapf文件及文件夹图标vscode-icon......