Kotlin OpenCV 视频分析和对象跟踪60 MIL 对象跟踪

news2024/9/25 8:25:30

Kotlin OpenCV 视频分析和对象跟踪60 MIL 对象跟踪

  • 1 OpenCV 对象跟踪算法
  • 2 Kotlin 引入依赖
  • 3 OpenCV 下载
  • 4 Kotlin OpenCV MIL 对象跟踪

1 OpenCV 对象跟踪算法

算法算法特点
1 BOOSTING Tracker基于 AdaBoost 算法。适合于简单的对象跟踪任务。
算法较老,在复杂场景中表现一般。
2 KCF Tracker (Kernelized Correlation Filters)基于核相关滤波器的算法。计算速度快,适合实时应用。
对尺度变化和旋转的适应性较差。
3 TLD Tracker (Tracking-Learning-Detection)结合了跟踪、学习和检测的三部分。适合处理长时间跟踪和对象消失再出现的情况。
复杂度较高,运行速度较慢。
4 MedianFlow Tracker基于光流法的中值流算法。对预测跟踪位置的误差敏感,适合处理稳定运动的对象。
在快速运动或剧烈变化的背景下效果不佳。
5 GOTURN Tracker (Generic Object Tracking Using Regression Networks)基于深度学习的回归网络。不需要在线更新模型,跟踪效果稳定。
需要大量的训练数据,计算资源需求较高。
6 MOSSE Tracker (Minimum Output Sum of Squared Error)基于最小输出平方误差的滤波器。计算速度非常快,适合实时跟踪。
对噪声和光照变化敏感。
7 CSRT Tracker (Discriminative Correlation Filter with Channel and Spatial Reliability)改进的相关滤波器,具有空间和通道可靠性。在复杂背景下表现优异,对尺度变化有较好适应性。
计算量较大,速度较慢。
8 DaSiamRPN Tracker (Siamese Region Proposal Network)基于孪生网络的区域建议方法。能够处理快速运动和尺度变化。
需要预先训练好的模型,计算资源需求高。
9 MIL Tracker (Multiple Instance Learning)基于多实例学习算法。能够处理部分遮挡的问题。
在动态变化的背景下表现不佳。

2 Kotlin 引入依赖

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>opencv-platform</artifactId>
    <version>4.9.0-1.5.10</version>
</dependency>

3 OpenCV 下载

OpenCV 下载地址
在这里插入图片描述

4 Kotlin OpenCV MIL 对象跟踪

Kotlin OpenCV 全部代码

package com.xu.com.xu.tracking

import org.bytedeco.opencv.global.opencv_highgui
import org.bytedeco.opencv.global.opencv_imgproc
import org.bytedeco.opencv.opencv_core.Mat
import org.bytedeco.opencv.opencv_core.Rect
import org.bytedeco.opencv.opencv_core.Scalar
import org.bytedeco.opencv.opencv_video.Tracker
import org.bytedeco.opencv.opencv_video.TrackerMIL
import org.bytedeco.opencv.opencv_videoio.VideoCapture
import org.opencv.core.Core
import java.io.File
import java.util.*


object Tracking {

    init {
        val os = System.getProperty("os.name")
        val type = System.getProperty("sun.arch.data.model")
        if (os.uppercase(Locale.getDefault()).contains("WINDOWS")) {
            val lib = if (type.endsWith("64")) {
                File("lib\\opencv-4.9\\x64\\" + System.mapLibraryName(Core.NATIVE_LIBRARY_NAME))
            } else {
                File("lib\\opencv-4.9\\x86\\" + System.mapLibraryName(Core.NATIVE_LIBRARY_NAME))
            }
            System.load(lib.absolutePath)
        }
        println(Core.VERSION)
    }

    @JvmStatic
    fun main(args: Array<String>) {
        val video = VideoCapture("lib/data/video/cup.mp4")
        // 第一帧影像
        val first = Mat()
        video.read(first)
        // 鼠标框选区域
        val roi: Rect? = opencv_highgui.selectROI("Select", first, false, false, false)
        opencv_highgui.destroyWindow("Select")
        // 创建跟踪器
        val tracker: Tracker = TrackerMIL.create()
        tracker.init(first, roi)
        while (video.read(first)) {
            // 更新跟踪器
            val ok = tracker.update(first, roi)
            if (ok) {
                opencv_imgproc.rectangle(first, roi, Scalar(0.0, 0.0, 225.0, 0.0))
            } else {
                println("跟踪失败")
            }
            opencv_highgui.imshow("Tracking", first)
            if (opencv_highgui.waitKey(1) == 27) {
                break
            }
        }
        video.release()
        opencv_highgui.destroyAllWindows()
    }

}

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

LLVM理论篇之编译器结构

1、概述 编译器完成源程序到目标程序的翻译工作&#xff0c;这是一个复杂的整体过程。从概念上讲&#xff0c;一个编译程序的整体过程可以分为3个阶段&#xff0c;每个阶段将程序的一种语言表示形式转换成另一种语言表示形式&#xff0c;并且各个阶段在逻辑上是紧密相连的。典…

【C++】STL | list (链表)详解及重要函数的实现

目录 前言 总代码 ListNode类框架的建立 (成员与模板) list类的框架 普通构造 与 empty_init&#xff08;适合不同类型构造函数的小函数&#xff09; list的迭代器 引子 operator、operator--&#xff08;前置与后置&#xff09; operator 与 operator! operator* 与 …

基于主从Reactor模式的高性能服务器

服务器性能 百万并发&#xff1a;2核2G 2M Linux云服务器&#xff0c;2线程100并发请求&#xff0c;持续1000s&#xff0c;达到百万连接处理且0错误 高并发HTTP服务器项目&#xff1a;性能与功能性测试汇总-CSDN博客&#xff08;测试详细信息&#xff09; 主要通信逻辑分析 初…

专利申请后,如何支付年费?

专利申请后&#xff0c;如何支付年费&#xff1f;

Vue3项目创建及相关配置

Vue是一种用于构建用户界面的JavaScript框架。它采用了一种称为MVVM&#xff08;Model-View-ViewModel&#xff09;的架构模式。 MVVM是一种将用户界面与业务逻辑和数据分离的设计模式。它包括三个部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;表示应用程序…

Windows安装Swoft框架

实现方式&#xff1a; 安装虚拟机&#xff0c;在虚拟机里用宝塔搭建环境后安装Swoft&#xff0c; 然后用Phpstorm SSH方式开发&#xff0c;用Apipost调用 websocket服务。 1、安装虚拟机&#xff0c;下载和安装参见 &#xff1a; https://blog.csdn.net/2401_84297265/article…

基于STM32的智能窗帘控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家居智能窗帘控制办公室窗帘自动调节常见问题及解决方案 常见问题解决方案结论 1. 引言 智能窗帘控制系统能够通过时间、光照强度或远程控制&#xff0c;实现对…

基于OBSIDIAN+Ollama+llama3.1构建个人智能助理

这里写自定义目录标题 重新定义个人智能助理&#xff1a;应用场景隐私保护与数据安全&#xff1a;构建可信赖的AI系统人工智能底座&#xff1a;搭建基于OLLAMA的大模型我的OLLAMA本地化部署配置不同模型的响应情况各大模型对计算机资源的要求&#xff08;家庭使用为主&#xff…

38.【C语言】指针(重难点)(C)

目录: 8.const 修饰指针 *修饰普通变量 *修饰指针变量 9.指针运算 *指针或-整数 *指针-指针 *指针关系运算 8.const 修饰指针 const 全称 constant adj.不变的 *修饰普通变量 #include <stdio.h> int main() {const int num 0;num 20;printf("%d\n", num)…

高并发HTTP服务器项目:性能与功能性测试汇总

负载测试 测试环境说明 云服务器&#xff1a;2核2G 2M Linux服务端和客户端环境&#xff1a;同在上述服务器中运行测试工具&#xff1a; wrk 模拟高并发请求htop检测CPU与内存使用情况 低负载压测&#xff1a;百万请求测试&#xff0c;2线程&#xff0c;100并发&#xff0c;100…

C++ 几何算法 - 求两条直线交点

一:算法介绍 1. 首先定义两条直线方程: 2. 解方程,求出x, y坐标 3. 如果x分母的行列式等于0, 说明两条直线平行或方向相反 4. 如果x,y分母的行列式都等于0,说明两条线重叠 二:代码实现: #include <cmath> #include <iostream>class Point2D { public:doubl…

Dubbo框架实现RPC远程调用包括nacos的配置和初始化

项目背景介绍 这个技术我是直接在项目中运用并且学习的&#xff0c;所以我写笔记最优先的角度就是从项目背景出发 继上一次API网关完成了这个实现用户调用一次接口之后让接口次数增多的操作之后&#xff0c;又迎来了新的问题。 就是我们在调用接口的时候需要对用户进行校验&…

关于地址的级联选择器

相信大家在项目中经常要做关于地址的级联选择器&#xff1a;效果如下图 在常见的组件库&#xff0c;例如element-ui/element-plus等中就有关于级联选择器的使用&#xff0c;但该组件并没有封装好的关于中国省市区甚至更详细的关于地址的级联选择器&#xff0c;因此我尝试在网络…

Excel中的数据筛选利器:COUNTIF函数深度解析与应用实战

文章目录 前言一、COUNTIF基础应用二、常见用法1.基本条件计数2.使用通配符进行模糊匹配3.引用单元格中的值作为条件4.多条件计数&#xff08;使用COUNTIFS&#xff09;5.重复值查找与去重6.结合其他函数使用 前言 Excel中的COUNTIF函数是一个极为强大且灵活的工具&#xff0c;…

【MongoDB 】MongoDB 介绍及应用,设计到4个案例

MongoDB 介绍概述 基础概念 MongoDB 是非关系型数据库&#xff0c;也就是nosql&#xff0c;存储json数据格式会非常灵活&#xff0c;要比数据库mysql/MariaDB更好&#xff0c;同时也能为mysql/MariaDB分摊一部分的流量压力。 对于经常读写的数据他会存入内存&#xff0c;如此…

STL中的list以及简单实现

STL的list的底层结构其实就是带头双向循环双向链表 带头双向循环双向链表又简单又好用&#xff0c;效率又高&#xff0c;所以其结构是完美的&#xff08;对于链表而言&#xff09;&#xff1a; 其中一个原因&#xff1a;有哨兵位的头节点&#xff0c;又循环&#xff0c;找尾很…

前端day7-css选择器

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css</title><!-- 内嵌式CSS --><sty…

Python 为Excel单元格设置填充\背景色 (纯色、渐变、图案)

在使用Excel进行数据处理和分析时&#xff0c;对特定单元格进行背景颜色填充不仅能够提升工作表的视觉吸引力&#xff0c;还能帮助用户快速识别和区分不同类别的数据&#xff0c;增强数据的可读性和理解性。 本文将通过以下三个示例详细介绍如何使用Python在Excel中设置不同的单…

远程连接本地虚拟机失败问题汇总

前言 因为我的 Ubuntu 虚拟机是新装的&#xff0c;并且应该装的是比较纯净的版本&#xff08;纯净是指很多工具都尚未安装&#xff09;&#xff0c;然后在使用远程连接工具 XShell 连接时出现了很多问题&#xff0c;这些都是我之前没遇到过的&#xff08;因为之前主要使用云服…

javax.validation.constraints.NotEmpty 报错

1、问题 javax.validation.constraints.NotEmpty报错2、原因 validation-api版本较低问题 3、解决 升级版本 javax.validation:validation-api 由1.1.0.Final升级至 2.0.1.Final <dependency><groupId>javax.validation</groupId><artifactId>vali…