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

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

  • [1 OpenCV 对象跟踪算法](#1 OpenCV 对象跟踪算法)
  • [2 Kotlin 引入依赖](#2 Kotlin 引入依赖)
  • [3 OpenCV 下载](#3 OpenCV 下载)
  • [4 Kotlin OpenCV MIL 对象跟踪](#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 引入依赖

xml 复制代码
<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 全部代码

kotlin 复制代码
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()
    }

}


相关推荐
Kapaseker15 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z3 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton3 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream3 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam3 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker4 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc4 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite
如此风景5 天前
kotlin协程学习小计
android·kotlin
Kapaseker5 天前
你搞得懂这 15 个 Android 架构问题吗
android·kotlin
zh_xuan5 天前
kotlin 高阶函数用法
开发语言·kotlin