IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 卡尔曼滤波实例——预测橘子的轨迹 -> 正文阅读

[人工智能]卡尔曼滤波实例——预测橘子的轨迹

目录

流程

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

(一)滚动条获取阈值?

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

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

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

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


流程

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

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:56:46  更:2022-10-31 11:58:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:27:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码