码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 卡尔曼滤波实例——预测橘子的轨迹


    目录

    流程

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

    (一)滚动条获取阈值 

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

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

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

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


    流程

    step1:获取橘子的检测框

    step2:求取橘子的质心

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

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

    步骤:

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

    (一)滚动条获取阈值 

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

    代码

    1. import cv2
    2. import numpy as np
    3. def nothing(x):
    4. pass
    5. cv2.namedWindow('image')
    6. cv2.createTrackbar('a','image',0,255,nothing)
    7. cv2.createTrackbar('b','image',0,255,nothing)
    8. cv2.createTrackbar('c','image',0,255,nothing)
    9. cv2.createTrackbar('d','image',0,255,nothing)
    10. cv2.createTrackbar('e','image',0,255,nothing)
    11. cv2.createTrackbar('f','image',0,255,nothing)
    12. frame = cv2.imread('orange.jpg')
    13. frame = cv2.resize(frame,(700,400))
    14. while True:
    15. a = cv2.getTrackbarPos('a', 'image')
    16. b = cv2.getTrackbarPos('b', 'image')
    17. c = cv2.getTrackbarPos('c', 'image')
    18. d = cv2.getTrackbarPos('d', 'image')
    19. e = cv2.getTrackbarPos('e', 'image')
    20. f = cv2.getTrackbarPos('f', 'image')
    21. hsv_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    22. low_orange = np.array([a, b, c])
    23. high_orange = np.array([d, e, f])
    24. mask = cv2.inRange(hsv_img, low_orange, high_orange)
    25. cv2.imshow('image',mask)
    26. k = cv2.waitKey(1)&0xff
    27. if k==27:
    28. break

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

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

    1. import cv2
    2. import numpy as np
    3. class OrangeDetector:
    4. def __init__(self):
    5. self.low_orange = np.array([10, 152, 89])
    6. self.high_orange = np.array([180, 255, 255])
    7. def detect(self, frame):
    8. hsv_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    9. mask = cv2.inRange(hsv_img, self.low_orange, self.high_orange)
    10. contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    11. contours = sorted(contours, key=lambda x: cv2.contourArea(x), reverse=True)
    12. box = (0, 0, 0, 0)
    13. for cnt in contours:
    14. (x, y, w, h) = cv2.boundingRect(cnt)
    15. box = (x, y, x + w, y + h)
    16. break
    17. return box

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

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

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

    predicted = kf.predict(cx, cy)

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

    卡尔曼滤波预测代码

    1. import cv2
    2. from orange_detector import OrangeDetector
    3. from kalmanfilter import KalmanFilter
    4. cap = cv2.VideoCapture("orange.mp4")
    5. od = OrangeDetector()
    6. kf = KalmanFilter()
    7. while True:
    8. ret, frame = cap.read()
    9. if ret is False:
    10. break
    11. orange_bbox = od.detect(frame)
    12. x, y, x2, y2 = orange_bbox
    13. cx = int((x + x2) / 2)
    14. cy = int((y + y2) / 2)
    15. predicted = kf.predict(cx, cy)
    16. cv2.circle(frame, (cx, cy), 20, (0, 0, 255), 4)
    17. cv2.circle(frame, (predicted[0], predicted[1]), 20, (255, 0, 0), 4)
    18. cv2.imshow("Frame", frame)
    19. key = cv2.waitKey(10)
    20. if key == 27:
    21. break

  • 相关阅读:
    旺店通企业版与金蝶云星辰数据集成方案分享
    分库分表一:ShardingSphere介绍和入门实战
    Python实现批量采集美女shipin<无水印>
    难点解释-理解寄主机通过虚拟网络连接到虚拟机的概念
    第九章 预训练模型与自己模型参数不匹配和模型微调的具体实现
    232 - Crossword Answers (UVA)
    基于Python的旅游景点推荐系统设计与实现(源码+数据库+讲解)
    Artifact XXXwar exploded Artifact is being deployed, please wait...(已解决)
    【axios网络请求库】认识Axios库;axios发送请求、创建实例、创建拦截器、封装请求
    大数据毕设选题 - 招聘岗位数据分析可视化(python 爬虫)
  • 原文地址:https://blog.csdn.net/weixin_54627824/article/details/127472819
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号