递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2937|回复: 4
打印 上一主题 下一主题

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

[复制链接]

24

主题

209

帖子

1618

积分

金牌会员

Rank: 6Rank: 6

积分
1618
跳转到指定楼层
楼主
发表于 2023-8-16 13:36:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一直没明白
回复

使用道具 举报

24

主题

209

帖子

1618

积分

金牌会员

Rank: 6Rank: 6

积分
1618
沙发
 楼主| 发表于 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)  这里一直返回假的。不知道有没有大佬写一个多目标的例子呢
回复

使用道具 举报

24

主题

209

帖子

1618

积分

金牌会员

Rank: 6Rank: 6

积分
1618
板凳
 楼主| 发表于 2023-8-16 14:48:40 | 只看该作者
回复

使用道具 举报

24

主题

209

帖子

1618

积分

金牌会员

Rank: 6Rank: 6

积分
1618
地板
 楼主| 发表于 2023-8-16 15:43:10 | 只看该作者
回复

使用道具 举报

24

主题

209

帖子

1618

积分

金牌会员

Rank: 6Rank: 6

积分
1618
5#
 楼主| 发表于 2023-8-16 15:53:01 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 13:24 , Processed in 0.084098 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表