赵曰天 发表于 2023-8-16 13:36:57

请问一下CV库的多目标跟踪怎么使用呢

一直没明白

赵曰天 发表于 2023-8-16 13:38:02

<火山程序 类型 = "通常" 版本 = 1 />

包 火山.程序

类 启动类 <公开 基础类 = 窗口程序类>
{
    变量 主窗口对象 <类型 = 我的主窗口>

    方法 启动方法 <公开 类型 = 整数>
    {
      主窗口对象.创建主窗口 ()
      返回 (1)
    }
}

# ===

类 我的主窗口 <基础类 = 窗口 注释 = "样例主窗口" @视窗.布局 = "client_size = \"500, 300\"" 标题 = "我的主窗口">
{
    变量 视频地址 <公开 类型 = 文本型 值 = "G:\\target_tracking\\vtest.avi">
    变量 按钮1 <类型 = 按钮 隐藏值属性 = "0" @视窗.布局 = "id = 101\r\npos = \"173, 22, 120, 40\"" 标题 = "打开视频">
    变量 视频 <公开 类型 = CV视频>
    变量 当前帧 <公开 类型 = CV矩阵类>
    变量 单目标跟踪 <公开 类型 = CV单目标跟踪器>
    变量 多目标跟踪 <公开 类型 = CV多目标跟踪器TLD>
    变量 ROT <公开 类型 = CV矩形类>
    变量 ROT1 <公开 类型 = CV矩形类>
    变量 ROT2 <公开 类型 = CV矩形类>
    变量 ROT3 <公开 类型 = CV矩形类>
    变量 初始化ROT <公开 类型 = CV矩形类小数>
    变量 初始化ROT2 <类型 = CV矩形类小数>
    变量 初始化ROT3 <类型 = CV矩形类小数>
    变量 ROT容器 <公开 类型 = CV矩形类容器>
    变量 ROT容器小数 <类型 = CV矩形类小数容器>

    方法 按钮_被单击 <接收事件 类型 = 整数 注释 = "当按钮被单击后发送此事件">
    参数 来源对象 <类型 = 按钮 注释 = "提供事件产生的具体来源对象">
    参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
    {
      如果 (来源对象 == 按钮1)
      {

            如果真 (视频.打开视频 (视频地址, ) == 假)
            {
                信息框 ("视频不存在!", , )
            }
            视频.取当前帧 (当前帧)
            ROT容器.加入成员 (ROT1)
            ROT容器.加入成员 (ROT2)
            ROT容器.加入成员 (ROT3)

            调试输出 ("ROT容器成员数:" + 到文本 (ROT容器.取成员数 ()))


            CV核心.
            单目标跟踪.初始化 (当前帧, ROT1)
            单目标跟踪.初始化 (当前帧, ROT2)
            单目标跟踪.初始化 (当前帧, ROT3)
            单目标跟踪.创建KFC跟踪器 ()
            CV核心.选择ROI多个 ("选择窗口", 当前帧, ROT容器, , )
            ROT容器小数.加入成员 (初始化ROT)
            ROT容器小数.加入成员 (初始化ROT2)
            ROT容器小数.加入成员 (初始化ROT3)

            判断循环 (当前帧.是否为空 () == 假)
            {
                当前帧.释放 ()
                视频.取当前帧 (当前帧)

                如果 (当前帧.是否为空 () == 真)
                {
                  返回 (1)
                }

                调试输出 ("这里1")

                单目标跟踪.更新跟踪器 (当前帧, ROT1)
                // 单目标跟踪.更新跟踪器 (当前帧, ROT2)
                // 单目标跟踪.更新跟踪器 (当前帧, ROT3)

                多目标跟踪.添加_单个目标 (单目标跟踪, 当前帧, 初始化ROT)
                多目标跟踪.添加_单个目标 (单目标跟踪, 当前帧, 初始化ROT2)
                多目标跟踪.添加_单个目标 (单目标跟踪, 当前帧, 初始化ROT3)

                多目标跟踪.更新ROI (当前帧)
                ROT容器小数 = 多目标跟踪.获取目标ROI ()



                // CV核心.画矩形小数 (当前帧, ROT容器小数.取成员 (1), CV标量类.新建三通道 (0, 255, 100), , )
                调试输出 ("这里3")
                // CV核心.画矩形小数 (当前帧, ROT容器小数.取成员 (1), CV标量类.新建三通道 (0, 255, 100), , )
                // CV核心.画矩形小数 (当前帧, ROT容器小数.取成员 (2), CV标量类.新建三通道 (0, 255, 100), , )

                调试输出 ("ROT容器数量:" + 到文本 (ROT容器小数.取成员数 ()))


                // CV核心.画矩形 (当前帧, ROT, CV标量类.新建三通道 (100, 0, 200), , )
                // CV核心.画矩形 (当前帧, ROT2, CV标量类.新建三通道 (0, 0, 200), , )
                // CV核心.画矩形 (当前帧, ROT3, CV标量类.新建三通道 (0, 100, 200), , )
                CV核心.显示图像 ("当前帧图像", 当前帧, , )

                如果真 (CV核心.等待按键 (5) == 27)
                {
                  跳出循环
                }



            }


            调试输出 ("这里2")




      }
      返回 (0)
    }
}

多目标跟踪.添加_单个目标 (单目标跟踪, 当前帧, 初始化ROT)这里一直返回假的。不知道有没有大佬写一个多目标的例子呢

赵曰天 发表于 2023-8-16 14:48:40

:):):):):):):)

赵曰天 发表于 2023-8-16 15:43:10

:(:(:(:(:(:(:(

赵曰天 发表于 2023-8-16 15:53:01

:'(:'(:'(:'(:'(:'(
页: [1]
查看完整版本: 请问一下CV库的多目标跟踪怎么使用呢