美文网首页
利用opnecv里BRO特征算法的进行颜色跟踪 - 草稿

利用opnecv里BRO特征算法的进行颜色跟踪 - 草稿

作者: Python小学生邬恒 | 来源:发表于2019-04-09 02:02 被阅读0次

目录

主要目标

我们利用python与和opencv库中的算法,实现了一个红的物体的检测与跟踪。
流程图如如下:

graph TD
A[摄像头采集视频流]  --> B[ORB算法计算特征值和BF匹配]
B--> C(初始化窗口大小和位置)
C[将窗口内的图像转换到色度空间] --> D[计算窗口中的色度直方图]
D --> E[计算反向投影区,再通过它计算目标的颜色概率分布图]
E --> F[使用camshift进行目标跟踪]
F --> H[计算相似度]
H --> B
H --> I[结束]


opencv

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。目前opecv4.0已上线。

ORB算法与BF匹配

orb算法(Oriented FASTand Rotated BRIEF),这个算法时基于FAST算法进行快速的特征值获取,简单说就是比较某一个点的灰度值与其周围点灰度值的差值,如果这个点与周围点都不同,则说明这个点是特征点。但是FAST算法没有旋转不变性。opencv中orb算法利用图像金字塔解决尺度变化问题,利用 BRIEF解决旋转不变的问题。
详细见ORB算法详解

BF算法(Brute Force)是一种匹配算法,他会匹所有的特征点,然后计算汉明距离。
完整的参数设置见官方文档ORB与BFopencv文档
以下是一个实例

#导入模块
import numpy as np
import cv2
import matplotlib as plt
#导如图片
img1=cv2.imread('TX.jpg',0)
img2=cv2.imread('TXX.jpg',0)
#初始化orb
orb=cv2.ORB_create()
#获取特征点
kp1=orb.detect(img1,None)
kps1,des1=orb.compute(img1,kp1)

kp2=orb.detect(img2,None)
kps2,des2=orb.compute(img2,kp2)
#初始化BF
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
#匹配
mmatches1= bf.match(des1H, des2H)
#将匹配距离按从小到大排序。
matches=sorted(matches1,key=lambda x:x.distance)
#获取匹配到的特征点
if len(matches)>20:
    scr_pts=np.float32([kps1[m.queryIdx].pt for m in matches]).reshape(-1,1,2)
    dst_pts=np.float32([kps2[m.trainIdx].pt for m in matches]).reshape(-1,1,2)
    M,mask=cv2.findHomography(scr_pts,dst_pts,cv2.RANSAC,5.0)
    matthmask=mask.ravel().tolist()
    h,w=img1.shape
    pts=np.float32([[0,0],[0,h-1],[w-1,h-1],[w-1,0]]).reshape(-1,1,2)
    dst=cv2.perspectiveTransform(pts,M)
    hull=cv2.convexHull(np.int32(scr_pts[:10]))
    img9=cv2.drawContours(img1,np.int32(scr_pts[:200]),-1,255,3)
    x,y,w,h=cv2.boundingRect(np.int32(scr_pts[:200]))
    img8=cv2.rectangle(img9,(x,y),(x+w,y+h),(255,0,0),2)
else:
    matthmask=None
#绘制匹配对
img5=cv2.drawMatches(img1,kps1,img2,kps2,matches[:10],None,flags=2)
cv2.imwrite('match.jpg',img5)
cv2.imwrite('new.jpg',img8)

camshift算法

camshif算法是一种连续自适应的均值偏移算法,它能够跟踪目标窗口内的物体移动。
详细见camshift详解

相关代码见我的上一篇opencv+python图像颜色跟踪

判定

利用余弦定理来判断模板与跟踪目标的相似度。并设定一个阈值,如果余弦值小于这个阈值则重新匹配。
原理详见余弦定理计算相似度

import numpy as np
m = np.array([[1],[1],[2],[1]])
m = np.reshape(m, (1, -1))
n =  np.array([[3],[1],[1],[1]])
mun = np.dot(m, n)
    # heni    nger = np.sqrt(sum)
dis = np.linalg.norm(m) * np.linalg.norm(n)
cos = mun / dis
    #归一化0.5~1
sim = 0.5 + (0.5 * cos)
print(sim)

代码

完整的代码托管在码云代码

利用opnecv里BRO特征算法的进行颜色跟踪 - 草稿

相关文章

  • 利用opnecv里BRO特征算法的进行颜色跟踪 - 草稿

    目录 主要目标 我们利用python与和opencv库中的算法,实现了一个红的物体的检测与跟踪。流程图如如下: o...

  • 【AE学习笔记】第一节:替换天空效果

    学习重点: 1.利用跟踪器捕捉镜头晃动; 2.利用效果-颜色键-羽化抠除颜色相似背景; 3.利用调整图层对合成进行...

  • 影像组学综述:Radiomics and “radi-…omic

    一、影像组学的概念 利用算法对医学影像数据进行分析,利用肉眼无法识别的、量化的特征进行建模,用于医学决策(Gill...

  • 机器学习基础课(不断更新中)

    2.4 KNN算法 提升KNN效率image.png 3.2 图像的读取 3.3 颜色特征里最常用的是颜色直方图(...

  • 目标跟踪算法分类

    依据运动目标的表达和相似性度量,运动目标跟踪算法可以分为四类:基于主动轮廓的跟踪、基于特征的跟踪、基于区域的跟踪和...

  • Harris角点检测算法

    Harris角点算法 特征点检测广泛应用到目标匹配、目标跟踪、三维重建等应用中,在进行目标建模时会对图像进行目标特...

  • 图像聚类

    (1)利用主成分分析后选取主成分利用k-means算法进行聚类(2)提取图像的灰度直方图,利用直方图作为特征向量聚...

  • 使用决策树进行鸢尾花分类

    使用决策树一些关键步骤: 特征选取:信息增益越大,该特征越重要 节点划分算法: ID3,利用信息增益进行节点划分,...

  • 特征选择与特征学习算法研究--笔记1

    特征选择与特征学习算法研究 2.1特征选择 特征选择过程特征选择是对数据进行预处理的机器学习算法,通过从数据中筛选...

  • KNN(K Nearest Neighbor)的学习

      K近邻算法,不具有显示的学习过程,利用训练数据集对特征向量空间进行划分。算法关键在于使用特殊的数据结构来存储训...

网友评论

      本文标题:利用opnecv里BRO特征算法的进行颜色跟踪 - 草稿

      本文链接:https://www.haomeiwen.com/subject/lxcviqtx.html