目标跟踪(5)使用 Opencv 和 Python 进行对象跟踪 在本教程中 , 我们将学习如何基于 Opencv 和 Python 实现对象跟踪 。
首先必须明确目标检测和目标跟踪有什么区别:
我们将首先讨论对象检测,然后讨论如何将对象跟踪应用于检测 。
可能有不同的应用,例如,计算某个区域有多少人,检查传送带上有多少物体通过,或者计算高速公路上的车辆 。
当然 , 看过本教程后 , 您会很容易地想到数以千计的想法应用于现实生活或可能应用于工业 。
在本教程中 , 我们将使用 3 个文件:
首先我们需要调用highway.mp4文件并创建一个mask:
正如您在示例代码中看到的,我们还使用了 createBackgroundSubtractorMOG2 函数 , 该函数返回背景比率(background ratio),然后创建mask 。
mask可视化结果:
但是,如您所见,图像中有很多噪点 。因此,让我们通过删除所有较小的元素来改进提取,并将我们的注意力集中在大于某个面积的对象上 。
使用 OpenCV 的cv2.drawContours函数绘制轮廓,我们得到了这个结果 。
就本教程而言,分析整个窗口并不重要 。我们只对计算在某个点通过的所有车辆感兴趣,因此,我们必须定义一个感兴趣的区域 ROI 并仅在该区域应用mask 。
结果可视化如下:
函数 cv2.createBackgroundSubtractorMOG2 是在开始时添加的,没有定义参数,现在让我们看看如何进一步改进我们的结果 。history是第一个参数 , 在这种情况下 , 它设置为 100,因为相机是固定的 。varThreshold改为 40 , 因为该值越低,误报的可能性就越大 。在这种情况下,我们只对较大的对象感兴趣 。
在继续处理矩形之前,我们对图像进行了进一步的清理 。为此 , 阈值函数就派上用场了 。从我们的mask开始,我们告诉它我们只想显示白色或黑色值 , 因此通过编写254, 255,只会考虑 254 和 255 之间的值 。
然后我们将找到的对象的坐标插入到 if 条件中并绘制矩形
这是最终结果:
我们现在只需导入和集成跟踪功能 。
一旦创建了对象,我们必须获取边界框的每个位置并将它们插入到单个数组中 。
通过在屏幕上显示结果,您可以看到所有通过 ROI 的通道是如何被识别的 , 以及它们的位置是如何插入到特定的数组中的 。显然,识别的摩托车越多,我们的数组就越大 。
现在让我们将带有位置的数组传递给tracker.update() 。我们将再次获得一个包含位置的数组,但此外,将为每个对象分配一个唯一的 ID 。
从代码中可以看出 , 我们可以使用 for 循环分析所有内容 。此时我们只需要绘制矩形并显示车辆 ID 。
在图像中,您可以看到结果
main.py
从视频中也可以看到,我们已经获得了我们在本教程开始时设置的结果 。
但是,您必须将其视为练习或起点,因为关于这个主题有很多话要说,而本教程的目的只是让您了解对象跟踪的原理 。
如果你想将 Object Tracking 集成到你的项目中,你应该使用更可靠和先进的对象检测方法,以及跟踪方法 。
完整代码地址:私信“333”直接获取或者「链接」
python中add_trace是什么意思追踪 。
add(element)函数是将对象作为一个整体python+函数追踪,为字典添加元素python+函数追踪 , 若添加python+函数追踪的元素已在字典中中,则不执行任何操作 。
由于Python语言python+函数追踪的简洁性、易读性以及可扩展性 , 在国外用Python做科学计算python+函数追踪的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授 。
systrace实现原理 systrace是通过atrace和ftrace一起实现 。
抓取systracepython+函数追踪的adb命令如下python+函数追踪:
adb shell atrace -t 8 -z gfx view wm am sched freq inputatrace
python命令:
python systrace.py -b 10240 -t 10 wm am input ss power view freq workq sched idle sync gfx view hal dalvik disk -a com.tencent.mm -o PD1982_weixin.html
systrace抓取实质是通过atrace实现python+函数追踪,下面以ATRACE_CALL()为例说明systrace实现
system/core/libutils/include/utils/Trace.h
system/core/libcutils/include/cutils/trace.h
system/core/libcutils/trace-dev.cpp
system/core/libcutils/trace-dev.inc
到这可以看出:
ATRACE_CALL其实就是往atrace_marker_fd写入函数名和进程pid等信息python+函数追踪,其中atrace_marker_fd对应“/sys/kernel/debug/tracing/trace_marker”文件
systrace在内核层实质是通过ftrace来实现python+函数追踪,systrace的内容是写入内核分配的ringbuffer里面的,开关的实质是disable/enable ringbuffer,ftrace的总开关/sys/kernel/debug/tracing/tracing_on
开关ftrace命令如下:
adb shell echo 1/sys/kernel/debug/tracing/tracing_on
adb shell echo 0/sys/kernel/debug/tracing/tracing_on
通过tracing_mark_write函数把内容写入ringbuffer
msm-4.19/kernel/trace/trace.c
大致原理参考下图:
ftrace就是function trace的缩写,每个函数的追踪都有一个对应的tracepoint结构来表示,这个结构存放在特殊的section内存中 。
msm-4.19/include/linux/tracepoint-defs.h
3.1 tracepoint的probe函数注册
以高通gpu驱动ftrace为例,通过以下命令可以触发tracepoint的probe函数注册
adb shell echo 1/sys/kernel/debug/tracing/events/kgsl/enable
msm-4.19/kernel/tracepoint.c
tracepoint的probe函数实质是在下面这个宏里面定义 , 通过这个函数ftrace往对应的ringbuffer里面写入函数追踪数据
msm-4.19/include/trace/trace_events.h
3.2 probe函数的调用
以高通gpu驱动入列一条绘制命令_queue_drawobj函数为例
msm-4.19/drivers/gpu/msm/adreno_dispatch.c
通过trace_adreno_cmdbatch_queued来追踪_queue_drawobj函数,调用tracepoint的probe函数
接下来看下trace_adreno_cmdbatch_queued的实现
msm-4.19/drivers/gpu/msm/adreno_trace.h
trace_adreno_cmdbatch_queued真正定义在下面这个宏里面
msm-4.19/include/linux/tracepoint.h
最终调用到tracepoint注册的probe函数
msm-4.19/include/linux/tracepoint.h
总结下:Native层调用内核的tracing_mark_write来往ftrace的ringbuffer里面写入数据,而内核函数调用其对应probe函数往ftrace ringbuffer写入数据 。
python-opencv怎样找到要跟踪对象的HSV其实这真python+函数追踪的很简单,函数 cv2.cvtColor() 也可以用到这里 。但是现在你要传入的参数是(你想要
的)BGR 值而不是一副图 。例如,python+函数追踪我们要找到绿色的 HSV 值,我们只需在终端输入以下命令:
**import cv2
import numpy as np
green=np.uint8([0,255,0])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
error: /builddir/build/BUILD/opencv-2.4.6.1/
modules/imgproc/src/color.cpp:3541:
error: (-215) (scn == 3 || scn == 4)(depth == CV_8U || depth == CV_32F)
in function cvtColor
#scn (the number of channels of the source),
#i.e. self.img.channels(), is neither 3 nor 4.
#
#depth (of the source),
#i.e. self.img.depth(), is neither CV_8U nor CV_32F.
# 所以不能用 [0,255,0] ,而要用 [[[0,255,0]]]
# 这里的三层括号应该分别对应于 cvArray , cvMat , IplImage
green=np.uint8([[[0,255,0]]])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print hsv_green
[[[60 255 255]]]**1234567891011121314151617181912345678910111213141516171819
**扩展缩放只是改变图像的尺寸大小 。OpenCV 提供的函数 cv2.resize()
可以实现这个功能 。图像的尺寸可以自己手动设置,你也可以指定缩放因子 。我
们可以选择使用不同的插值方法 。在缩放时我们推荐使用 cv2.INTER_AREA,
在扩展时我们推荐使用 v2.INTER_CUBIC(慢) 和 v2.INTER_LINEAR 。
默认情况下所有改变图像尺寸大小的操作使用的插值方法都是 cv2.INTER_LINEAR 。
你可以使用下面任意一种方法改变图像的尺寸:**
12345671234567
**# -*- coding: utf-8 -*-
"""
@author: Andrew
"""
import cv2
import numpy as np
img=cv2.imread('tu.jpg')
res=cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height),interpolation=cv2.INTER_CUBIC)
while(1):
cv2.imshow('res',res)
cv2.imshow('img',img)
if cv2.waitKey(1)0xFF==27:
break
cv2.destroyAllWindows()**1234567891011121314151617181920212212345678910111213141516171819202122
顶
【python+函数追踪 pycharm变量】python+函数追踪的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于pycharm变量、python+函数追踪的信息别忘了在本站进行查找喔 。
推荐阅读
- python新手代码大全,python新手入门代码
- js离焦事件和点击事件冲突,js获取焦点的事件
- 什么配置电脑能玩红警,什么配置的电脑适合玩游戏
- 车内直播录屏,车里录像的叫什么
- sqlserver怎么创建外键,sqlyog创建外键
- 3d网游排行榜前十名网络游戏,3d网游排行榜前十名网络游戏
- 怎么让路由器恢复网速快,怎么才能让路由器恢复出厂设置
- vmware连主机虚拟串口,虚拟机连接虚拟串口
- go语言中的集合 go set集合