卡尔曼滤波实例——预测橘子的轨迹

news2024/11/20 0:28:36

目录

流程

一、采用轮廓的方式检测橘子位置

(一)滚动条获取阈值 

(二)获取到图像中的包围橘子对应的白色图形的最小矩形框的信息

二、获取橘子检测框的质心

三、将质心送入卡尔曼滤波器,获取下一次的质心位置

四、绘图质心中心的圆圈,让效果直观显示出来 


流程

step1:获取橘子的检测框

step2:求取橘子的质心

step3:将质心送入卡尔曼滤波器,获取到预测的下一次橘子的质心位置

一、采用轮廓的方式检测橘子位置

步骤:

  • 采用OpenCV滚动条来确定阈值
  • 设置高低阈值,利用inRange函数,将图像转为二值图,为方便之后的轮廓提取
  • 使用findContours函数,提取二值图中所有的轮廓,并采用cv2.RETR_TREE,建立轮廓等级树
  • 等级树初始是升序,我们要获取最大的那个轮廓,那么就进行sort降序排序
  • 最后,第一个轮廓的最小外边框的参数就可以用boundingRect获取到了

(一)滚动条获取阈值 

视频中截图的一张带有橘子的图

代码

import cv2
import numpy as np

def nothing(x):
    pass

cv2.namedWindow('image')
cv2.createTrackbar('a','image',0,255,nothing)
cv2.createTrackbar('b','image',0,255,nothing)
cv2.createTrackbar('c','image',0,255,nothing)
cv2.createTrackbar('d','image',0,255,nothing)
cv2.createTrackbar('e','image',0,255,nothing)
cv2.createTrackbar('f','image',0,255,nothing)

frame = cv2.imread('orange.jpg')
frame = cv2.resize(frame,(700,400))

while True:
    a = cv2.getTrackbarPos('a', 'image')
    b = cv2.getTrackbarPos('b', 'image')
    c = cv2.getTrackbarPos('c', 'image')
    d = cv2.getTrackbarPos('d', 'image')
    e = cv2.getTrackbarPos('e', 'image')
    f = cv2.getTrackbarPos('f', 'image')
    hsv_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    low_orange = np.array([a, b, c])
    high_orange = np.array([d, e, f])
    mask = cv2.inRange(hsv_img, low_orange, high_orange)
    cv2.imshow('image',mask)
    k = cv2.waitKey(1)&0xff
    if k==27:
        break

(二)获取到图像中的包围橘子对应的白色图形的最小矩形框的信息

检测橘子轮廓最小外边框代码

import cv2
import numpy as np

class OrangeDetector:
    def __init__(self):
        self.low_orange = np.array([10, 152, 89])
        self.high_orange = np.array([180, 255, 255])

    def detect(self, frame):
        hsv_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        mask = cv2.inRange(hsv_img, self.low_orange, self.high_orange)
        contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
        contours = sorted(contours, key=lambda x: cv2.contourArea(x), reverse=True)
        box = (0, 0, 0, 0)
        for cnt in contours:
            (x, y, w, h) = cv2.boundingRect(cnt)
            box = (x, y, x + w, y + h)
            break
        return box

二、获取橘子检测框的质心

od = OrangeDetector()
orange_bbox = od.detect(frame)
x, y, x2, y2 = orange_bbox
cx = int((x + x2) / 2)
cy = int((y + y2) / 2)

三、将质心送入卡尔曼滤波器,获取下一次的质心位置

predicted = kf.predict(cx, cy)

四、绘图质心中心的圆圈,让效果直观显示出来 

卡尔曼滤波预测代码

import cv2
from orange_detector import OrangeDetector
from kalmanfilter import KalmanFilter

cap = cv2.VideoCapture("orange.mp4")
od = OrangeDetector()
kf = KalmanFilter()

while True:
    ret, frame = cap.read()
    if ret is False:
        break

    orange_bbox = od.detect(frame)
    x, y, x2, y2 = orange_bbox
    cx = int((x + x2) / 2)
    cy = int((y + y2) / 2)

    predicted = kf.predict(cx, cy)
    cv2.circle(frame, (cx, cy), 20, (0, 0, 255), 4)
    cv2.circle(frame, (predicted[0], predicted[1]), 20, (255, 0, 0), 4)

    cv2.imshow("Frame", frame)
    key = cv2.waitKey(10)
    if key == 27:
        break

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

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

相关文章

Markdown语言的简单学习

Markdown简单语法标题#空格 一级标题##空格 二级标题 以此类推三级标题四级...五级.....引用列表代码块表格分隔线链接强调语法(斜体、加粗、下划线)标题 #空格 一级标题 ##空格 二级标题 以此类推 三级标题 四级… 五级… … 引用 这是一段引用 …

<人生重开模拟器>——《Python项目实战》

目录 1.模拟实现 "人生重开模拟器" 1.1 问题导引: 1.2 问题分析: 2. 模拟实现分析及步骤: 3.完整源码: 4.写在最后的话: 后记:●由于作者水平有限,文章难免存在谬误之处&…

数据结构与算法----栈和队列(Stack Queue)

文章目录栈栈的操作栈的初始化入栈出栈取栈顶的元素判断栈是否为空求栈中数据元素的个数遍历栈中的所有元素清空栈栈的存储结构顺序存储链式存储顺序栈和链栈的区别栈的实战题目队列队列的操作入队出队遍历队列清空队列队列的存储结构顺序存储循环队列链式存储队列实战题目总结…

快速发布windows上的web项目【免费内网穿透】

快速发布windows上的web项目【免费内网穿透】 文章目录快速发布windows上的web项目【免费内网穿透】什么是cpolar内网穿透?概述1. 搭建一个静态Web站点1.1 下载演示站点1.2 本地运行演示站点1.3 本地浏览测试站点是否正常2. 注册并安装cpolar内网穿透3. 本地web站点…

玩转 CSS 的艺术之美

你将获得 深刻理解各种CSS原理 解构不为人知的CSS技巧 概念、技巧、场景三合一,实现“神奇”效果 强化吸收CSS知识体系,玩转各种神操作骚技巧 作者介绍 JowayYoung,资深前端工程师,目前就职于网易互动娱乐事业群&#xff0c…

前端面试之道

小册介绍 如果需要用一句话来介绍这本小册的话,「一年磨一剑」应该是最好的答案了。 为什么这样说呢?在出小册之前,我收集了大量的一线大厂面试题,通过大数据统计出了近百个常考知识点,然后根据这些知识点写成了这本…

《深度学习》:CANN训练营_昇腾AI入门课学习笔记(第二章 TensorFlow模型迁移训练)

文章目录第二章 TensorFlow模型迁移&训练本章学习目标AI模型开发基础知识入门Python水平要求了解深度学习和神经网络了解TensorFlow AI框架了解基于CANN的模型开发流程(重点)TensorFlow AI模型迁移详解为什么要做模型迁移TensorFlow AI模型自动迁移详…

【Python数据科学快速入门系列 | 10】Matplotlib数据分布图表应用总结

这是机器未来的第59篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/127484292 《Python数据科学快速入门系列》快速导航: 【Python数据科学快速入门系列 | 01】Numpy初窥——基础概念【Python数据科学快速入门系列 | 02】创…

安卓讲课笔记3.3 相对布局

文章目录零、学习目标一、导入新课二、新课讲解(一)相对布局概述1、布局特点2、继承关系图3、常用属性(1)相对于父容器居中(2)相对于父容器对齐(3)相对于其它控件位置(4&…

牛客网经典Java面试常见题

个人主页:熬夜磕代码丶 作品专栏: 数据结构与算法 我变秃了,也变强了 给大家介绍一款程序员必备刷题平台——牛客网 点击注册一起刷题收获大厂offer吧 文章目录一、二叉搜索树与双向链表二、从尾到头打印链表三、调整数组奇数位于偶数前面四、删除链表…

大数据毕业设计可视化大屏前后端项目分享

1、前言 很久没有分享过可视化大屏的项目了,距离上次分享基于Echarts的数据可视化大屏系统设计分享这篇可视化系统已经过去了整整一年有余。当时分享这篇博客没想到会收获这么多的阅读量,并且在刚发布的时候,还上了CSDN的博客热搜2&#xff…

gcc环境下演示C语言变长数组

前言 👻作者:龟龟不断向前 👻简介:宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。 👻专栏:C初阶知识点 👻工具分享: 刷题: 牛客网 leetcode笔记软…

安全帽佩戴识别算法

安全帽佩戴识别算法采用SuiJi-AI人工智能深度学习技术计算机智能视觉识别算法,且通过规模化的安全帽数据识别训练。安全帽佩戴识别算法借助现场已有的监控摄像头对监控画面中人员着装行为进行实时分析识别。假如检测人员不戴安全帽,SuiJiAi将立即记录和警…

致敬第一个1024(第一次Java代码编程)

昨日,笔者刚刚下载好IDEA,今日,笔者将会实现第一次的Java代码!!信心满满!!下面请看笔者的代码吧!!骄傲的小心,已经澎湃! 因此,本篇文…

如何实现一个SQL解析器

作者:vivo 互联网搜索团队- Deng Jie 一、背景 随着技术的不断的发展,在大数据领域出现了越来越多的技术框架。而为了降低大数据的学习成本和难度,越来越多的大数据技术和应用开始支持SQL进行数据查询。SQL作为一个学习成本很低的语言&#…

【正点原子I.MX6U-MINI应用篇】5、嵌入式Linux在LCD上显示BMP、JPG、PNG图片

一、BMP图像介绍与显示 我们常用的图片格式有很多,一般最常用的有三种:JPEG(或 JPG)、PNG、BMP和GIF。其中 JPEG(或JPG)、PNG以及 BMP 都是静态图片,而 GIF 则可以实现动态图片。 BMP(全称 Bitmap)是Window操作系统中的标准图像文件格式&am…

计算机学院第五次ACM周赛题解

目录 HF的智能小车车 Do you like Van game&#xff1f; 好姐姐的三角形 帮帮小陈 卷点 签个到就下班 现在是摸鱼时间 现在是摸鱼时间 PLUS HF的智能小车车 签到题目&#xff0c; #include<iostream>using namespace std;int main() {string arr;cin>>ar…

学生会信息管理系统

1、项目介绍 学生会信息管理系统拥有两种角色&#xff1a;学生和管理员 学生&#xff1a;查看活动和新闻信息、发布活动、登录注册 管理员&#xff1a;公共新闻管理、用户管理、活动审核等 2、项目技术 后端框架&#xff1a; Servlet、mvc模式 前端技术&#xff1a;jsp、c…

Linux(centos)安装Jenkins

Jenkins 是一个开源的, 基于Java的自动服务器&#xff0c;提供了一种建立持续集成和持续交付(CI/CD)流水线的简单方法 。 持续集成 (CI)是DevOps实践中&#xff0c;团队成员定期将他们的代码更改提交到版本仓库, 然后运行自动化的构建和测试. 持续交付(CD)是自动构建、测试和部…

【附源码】计算机毕业设计SSM物业管理系统设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…