两幅亮度不同的图像拼接成一幅图之后怎么设置一个指定的平均亮度?

VC/MFC > 图形处理/算法 [问题点数:40分]
等级
本版专家分:5
勋章
Blank
签到新秀 累计签到获取,不积跬步,无以至千里,继续坚持!
结帖率 98.89%
等级
本版专家分:7726
勋章
Blank
技术圈认证(专家版) 博客专家完成年度认证,即可获得
Blank
签到新秀 累计签到获取,不积跬步,无以至千里,继续坚持!
Blank
GitHub 绑定GitHub第三方账户获取
Blank
领英 绑定领英第三方账户获取
等级
本版专家分:87700
勋章
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
wuxiao0313

等级:

Blank
签到新秀 累计签到获取,不积跬步,无以至千里,继续坚持!
图像拼接

图像拼接是指将描述同一场景的两张或者多张有重叠区域的图像,通过图像配准和图像融合技术拼接一幅大场景全新图像的过程。 文章目录图像拼接过程的三过程图像的预处理图像预处理图像的投影模型平面投影模式...

【 Halcon 】 将多张图片指定位置合并平铺成一张图,读取并显示多张图片

此方法旨在满足部分区域拍照后,想输出成一张图,对重叠区域要求不是很高。区别于图像拼接方法,请注意。 在这里,我在一个文件夹中保存了9张图,遍历读取,从而合成显示。 图片合成方法 public void ...

特征点匹配应用——图像拼接的原理与基于OpenCV的实现

最初我看特征点匹配的东西源于三维重建,由于特征点匹配的不准确,导致两幅图像之间的位置关系计算不准确,从而使得最后生成的三维点云中有很多的噪声。看特征点匹配大概看了一个半月,把已有的除了最新的基于深度...

图像拼接算法及实现

图像拼接解决的问题一般式,通过对齐系列空间重叠的图像,构成一个无缝的、高清晰的图像,它具有比单个图像更高的分辨率和更大的视野。  早期的图像拼接研究一直用于照相绘图学,主要是对大量

【OpenCV图像处理入门学习教程三】基于SIFT特征和SURF特征的微旋转图像拼接与融合生成全景图像的比较

OpenCV图像处理入门学习教程系列,上篇第二篇:不同阈值二值化图像图像拼接与融合介绍图像拼接在实际中的应用场景非常广泛,比如无人机的航拍,遥感图像等,甚至小到我们出去游玩用手机拍照时,无奈广角太小,没有...

图像拼接中的算法

之前一个则是对图像拼接的介绍,这部分是算法介绍 图像拼接基础调研和综述 1 图像拼接中的算法 1.1 图像预处理 通过几何变形校正方法对采集到的图像进行校正后,可以使得相同景物在图像重叠区域所成的像...

图像拼接的基本流程及关键技术

From: 遥感图像拼接研究 图像拼接的基本流程 (1) 图像预处理:对原始图像进行直方匹配、平滑滤波、增强变换等数字图像 处理的基本操作,为图像拼接的下一步作好准备。 (2) 图像配准:图像配准是...

基于OpenCV进行图像拼接原理解析和编码实现(提纲 代码和具体内容在课件中)...

、背景1.1概念定义我们这里想要实现的图像拼接,既不是如题图1和2这样的“图片艺术拼接”,也不是如3这样的“显示拼接”,而是实现类似“BaiDU全景”这样的全部的或者部分的实际场景的重新回放。对于图像拼接的...

Matalb图像拼接技术

3.3.2 特征点匹配法  比值匹配法利用图像特征较少,而且在图像发生小角度旋转的时候容易发生误匹配。基于特征点的匹配法可以很好的解决这类问题。特征点主要指图像中的...自七十年代以来出现系列各不相同

hslogic_图象拼接--数字图像拼接技术

全景(Panorama),或者说是图像拼接(Mosaic)技术是由于摄像器材的视角限制,不可能次拍出很大图片而产生的。本文主要围绕拼接合成技术展开讨论,首先关注一下拼接的主要用途,再简单介绍拼接流程和核心问题、图像...

计算机视觉——全景拼接

第三章:图像图像的映射——全景拼接1. 图像拼接简介2. 图像拼接算法分类3. “图像匹配方法(registration)”的选择3.1 基于空间域(Spatial domain)图像拼接算法4. 有关 “图像融合方法(blending)”的介绍4.1 APAP...

如何实现图像间精确配准(matlab)

这里主要讲解的是多模态或者说是多序列MRI图像配准。采用的图片是人体膝盖。配准暂且分为五部分。 Step1. 下载图片 Step2. 初始配准(粗配准) Step3. 提高配准精度 Step4. 利用初始条件提高配准精度配准 Step...

图像检索传统算法学习笔记

图像检索领域传统算法学习笔记 (与组内同学一起找到的一些图像检索传统算法,作小结,以防忘记) 性能统计: 传统图像检索算法 CIFAR-10数据集mAP值(编码数不同) LSH局部敏感...

OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V ()

首先你们拿到一张图片堆碎片,要做的就是把这些碎片以正确的方式排列起来从而重建这幅图像。问题是,你怎样做到的呢?如果把你做游戏的原理写成计算机程序,那计算机就也会玩拼图游戏了。如果计算机可以玩拼图,...

Python计算机视觉编程第二章——局部图像描述子

Python计算机视觉编程局部图像描述子()Harris 角点检测器(二)SIFT(尺度不变特征变换)2.1 兴趣点2.2 描述子2.3 检测兴趣点2.4 匹配描述子(三)匹配地理标记图像3.1 从 Panoramio 下载地理标记图像3.2 使用...

综述 | 图像特征提取与匹配技术

关注“机器学习与生成对抗网络”,设为星标,第时间获取更多干货作者:william链接:https://zhuanlan.zhihu.com/p/133301967文仅分享,侵删特征提取...

全面综述:图像特征提取与匹配技术

点击上方“AI小白学视觉”,选择加"星标"或“置顶”重磅干货,第时间送达作者:William来源:自动驾驶全栈工程师知乎专栏,https://www.zhihu.com...

[OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V ()

部分 V图像特征提取与描述 ...首先你们拿到一张图片堆碎片,要做的就是把这些碎片以正确的方式排列起来从而重建这幅图像。问题是,你怎样做到的呢?如果把你做游戏的原理写成计算机程序,那...

VC图像编程

 图象拼接是在全景视频系统、地理信息系统等应用中经常遇到的一个问题,本文基于网格匹配的方法对边界部分有重叠的图象提出了种行之有效的对准算法,并通过平滑因子对图象实现了无缝拼接。并应用文档视窗模型实现...

深度学习中的图像数据扩增(Data Augmentations)方法总结:常用传统扩增方法及应用

深度学习中的图像数据扩增(Data Augmentations)方法总结:传统...另外需要注意的是,虽然对于不同的任务,比如对于分类,检测任务,不同的任务在采用某一个具体的扩增方法的时候会有所不同,比如对于检测任务需要考虑

Android开发精典案例60个【源码】

60个Android开发精典案例,好东西 - 给大家分享60个Android开发的精典案例,包含任务监听、设备适配,游戏框架搭建,特效实现,多点触控,网络协议,游戏关卡设置等内容。特别是做游戏开发的朋友值得研究。喜欢就拿走吧!

C语言游戏代码大全

双人贪吃蛇,别踩白方块,玫瑰花,矿井逃生等多种C语言游戏代码等你来实践!

Java经典编程300例(code)

目 录 第1章 Java语言概述 1 实例001 输出“Hello World” 2 实例002 输出控制台传递的参数 2 实例003 输出由“*”组成的三角形 3 实例004 输出符号表情 5 第2章 Eclipse开发工具 6 实例005 下载并运行Eclipse工具 7 实例006 为Eclipse安装汉化包 8 实例007 使用Eclipse注释代码 10 实例008 使用Eclipse格式化代码 11 实例009 安装WindowBuilder插件 12 实例010 开发计算器界面 14 第3章 Java语言基础 15 实例011 输出错误信息与调试信息 16 实例012 从控制台接收输入字符 16 实例013 重定向输出流实现程序日志 17 实例014 自动类型转换与强制类型转换 19 实例015 加密可以这样简单(位运算) 20 实例016 用三元运算符判断奇数和偶数 21 实例017 不用乘法运算符实现2×16 22 实例018 实现两个变量的互换 (不借助第3个变量) 23 第4章 流程控制 25 实例019 判断某一年是否为闰年 26 实例020 验证登录信息的合法性 27 实例021 为新员工分配部门 28 实例022 用switch语句根据消费 金额计算折扣 29 实例023 判断用户输入月份的季节 31 实例024 使用while循环语句与自增 运算符循环遍历数组 33 实例025 使用for循环输出杨辉三角形 34 实例026 使用嵌套循环在控制台上 输出九九乘法表 35 实例027 使用while循环计算1+ 1/2!+1/3!…1/20! 36 实例028 使用for循环输出空心的菱形 38 实例029 终止循环体 39 实例030 循环体的过滤器 41 第5章 数组及其常用操作 43 实例031 获取一维数组的最小值 44 实例032 将二维数组中的行列互换 45 实例033 利用数组随机抽取幸运观众 47 实例034 用数组设置JTable表格的 列名与列宽 49 实例035 使用按钮控件数组实现 计算器界面 51 实例036 通过复选框控件数组实现 添加多个复选框控件 52 实例037 使用选择排序法对数组排序 53 实例038 使用冒泡排序法对数组排序 55 实例039 使用快速排序法对数组排序 57 实例040 使用直接插入法对数组排序 59 实例041 使用sort()方法对数组排序 61 实例042 反转数组中元素的顺序 63 第6章 面向对象入门 65 实例043 自定义图书类 66 实例044 温度单位转换工具 67 实例045 成员变量的默认初始化值 68 实例046 单例模式的应用 69 实例047 汉诺塔问题求解 70 实例048 编写同名的方法 71 实例049 构造方法的应用 72 实例050 统计图书的销售量 73 实例051 两只完全相同的宠物 74 实例052 重新计算对象的哈希码 76 实例053 使用字符串输出对象 77 实例054 Java对象的假克隆 78 实例055 Java对象的浅克隆 80 实例056 Java对象的深克隆 82 实例057 序列化与对象克隆 84 实例058 深克隆效率的比较 87 第7章 面向对象进阶 89 实例059 经理与员工的差异 90 实例060 重写父类中的方法 92 实例061 计算几何图形的面积 93 实例062 简单的汽车销售商场 95 实例063 使用Comparable接口自定 义排序 96 实例064 策略模式的简单应用 98 实例065 适配器模式的简单应用 100 实例066 普通内部类的简单应用 102 实例067 局部内部类的简单应用 103 实例068 匿名内部类的简单应用 104 实例069 静态内部类的简单应用 105 实例070 实例化Class类的几种方式 107 实例071 查看类的声明 108 实例072 查看类的成员 110 实例073 查看内部类信息 112 实例074 动态设置类的私有域 113 实例075 动态调用类中方法 115 实例076 动态实例化类 116 实例077 创建长度可变的数组 117 实例078 利用反射重写toString()方法 119 第8章 字符串与包装类 121 实例079 将数字格式化为货币字符串 122 实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 126 实例083 字符与Unicode码的转换 128 实例084 判断用户名是否正确 129 实例085 用户名排序 130 实例086 判断网页请求与FTP请求 132 实例087 判断文件类型 133 实例088 判断字符串是否为数字 135 实例089 验证IP地址的有效性 136 实例090 鉴别非法电话号码 137 实例091 将字符串转换成整数 139 实例092 整数进制转换器 140 实例093 获取字符串中汉字的个数 141 实例094 批量替换某一类字符串 142 实例095 查看数字的取值范围 144 实例096 ASCII编码查看器 145 实例097 判断手机号的合法性 146 实例098 用字符串构建器追加字符 147 实例099 去掉字符串中的所有空格 148 实例100 Double类型的比较 149 第9章 Java集合类框架 151 范例101 用动态数组保存学生姓名 152 实例102 用List集合传递学生信息 153 实例103 Map集合二级联动 155 实例104 不重复随机数组排序 157 实例105 for循环遍历ArrayList 159 实例106 Iterator遍历ArrayList 159 实例107 ListIterator逆序遍历ArrayList 160 实例108 制作电子词典 161 实例109 制作手机电话簿 162 第10章 常用数学工具类 164 实例110 角度和弧度的转换 165 实例111 三角函数的使用 166 实例112 反三角函数的使用 167 实例113 双曲函数的使用 168 实例114 指数与对数运算 169 实例115 高精度整数运算 170 实例116 高精度浮点运算 171 实例117 七星彩号码生成器 173 实例118 大乐透号码生成器 174 第11章 错误处理 177 实例119 算数异常 178 实例120 数组下标越界异常 179 实例121 空指针异常 180 实例122 类未发现异常 181 实例123 非法访问异常 182 实例124 文件未发现异常 183 实例125 数据库操作异常 184 实例126 方法中抛出异常 185 实例127 方法上抛出异常 186 实例128 自定义异常类 187 实例129 捕获单个异常 188 实例130 捕获多个异常 189 第12章 输入/输出 191 实例131 显示指定类型的文件 192 实例132 以树结构显示文件路径 193 实例133 查找替换文本文件内容 194 实例134 设置Windows系统的文件 属性 195 实例135 文件批量重命名 196 实例136 快速批量移动文件 197 实例137 删除文件夹中的.tmp文件 198 实例138 将图片文件保存到数据库 199 实例139 从数据库读取图片文件 200 实例140 窗体动态加载磁盘文件 201 实例141 删除文件夹中所有文件 202 实例142 创建磁盘索引文件 203 实例143 控制台记录器 205 实例144 防止创建多个字符串对象 206 实例145 合并多个文本文件 207 实例146 对大文件实现分割处理 208 实例147 将分割后的文件重新合并 209 实例148 读取属性文件单个属性值 210 实例149 向属性文件中添加信息 211 实例150 在复制文件时使用进度条 212 实例151 从XML文件中读取数据 213 实例152 读取Jar文件属性 214 实例153 电子通讯录 215 实例154 批量复制指定扩展名文件 217 实例155 分类保存文件 218 实例156 搜索指定文件夹中的文件 219 实例157 实现文件锁定功能 220 实例158 简单的投票软件 221 实例159 压缩所有文本文件 222 实例160 将压缩包解压到指定文件夹 223 实例161 压缩所有子文件夹 225 实例162 深层文件夹压缩包的释放 226 实例163 解决压缩包中文乱码 227 实例164 Apache实现文件解压缩 228 实例165 把窗体压缩成ZIP文件 229 实例166 解压缩Java对象 230 实例167 文件压缩为RAR文档 231 实例168 解压缩RAR压缩包 233 实例169 为RAR压缩包添加注释 234 实例170 获取压缩包详细文件列表 235 实例171 从RAR压缩包中删除文件 237 实例172 在压缩文件中查找字符串 238 实例173 重命名RAR压缩包中文件 239 实例174 创建自解压RAR压缩包 240 第13章 枚举类型与泛型 242 实例175 查看枚举类型的定义 243 实例176 枚举类型的基本特性 244 实例177 增加枚举元素的信息 245 实例178 选择合适的枚举元素 246 实例179 高效的枚举元素集合 248 实例180 高效的枚举元素映射 249 实例181 使用枚举接口遍历元素 250 实例182 使用泛型实现栈结构 251 实例183 自定义泛型化数组类 253 实例184 泛型方法与数据查询 254 实例185 使用通配符增强泛型 256 实例186 泛型化的折半查找法 257 第14章 Swing入门 259 实例187 从上次关闭位置启动窗体 260 实例188 始终在桌面最顶层显示窗体 261 实例189 设置窗体大小 262 实例190 根据桌面大小调整窗体大小 263 实例191 自定义最大化、最小化和 关闭按钮 265 实例192 禁止改变窗体的大小 267 实例193 指定窗体标题栏图标 267 实例194 设置闪烁的标题栏 269 实例195 实现带背景图片的窗体 270 实例196 背景为渐变色的主界面 271 实例197 随机更换窗体背景 273 实例198 椭圆形窗体界面 275 实例199 钻石形窗体 276 实例200 创建透明窗体 277 实例201 信息提示对话框 278 实例202 设置信息提示对话框的图标 279 实例203 指定打开对话框的文件类型 280 实例204 为保存对话框设置默认文件名 282 实例205 支持图片预览的文件选 择对话框 283 实例206 颜色选择对话框 285 实例207 信息输入对话框 286 实例208 定制信息对话框 287 实例209 拦截事件的玻璃窗格 289 实例210 简单的每日提示信息 290 实例211 震动效果的提示信息 292 实例212 制作圆形布局管理器 293 实例213 制作阶梯布局管理器 295 实例214 密码域控件简单应用 296 实例215 文本域设置背景图片 297 实例216 文本区设置背景图片 298 实例217 简单的字符统计工具 299 实例218 能预览图片的复选框 300 实例219 简单的投票计数软件 301 实例220 单选按钮的简单应用 302 实例221 能显示图片的组合框 303 实例222 使用滑块来选择日期 305 实例223 模仿记事本的菜单栏 308 实例224 自定义纵向的菜单栏 309 实例225 复选框与单选按钮菜单项 311 实例226 包含图片的弹出菜单 312 实例227 工具栏的实现与应用 314 实例228 修改列表项显示方式 315 实例229 列表项与提示信息 316 实例230 表头与列的高度设置 317 实例231 调整表格各列的宽度 319 实例232 设置表格的选择模式 321 实例233 为表头增添提示信息 323 实例234 单元格的粗粒度排序 325 实例235 实现表格的查找功能 326 实例236 应用网格布局设计计算 器窗体 327 第15章 多线程 329 实例237 查看线程的运行状态 330 实例238 查看JVM中的线程名 331 实例239 查看和修改线程优先级 333 实例240 休眠当前线程 335 实例241 终止指定线程 336 实例242 线程的插队运行 337 实例243 使用方法实现线程同步 339 实例244 使用特殊域变量实现线程同步 341 实例245 简单的线程通信 342 实例246 新建有返回值的线程 344 实例247 使用线程池优化多线程编程 346 实例248 哲学家的就餐问题 348 第16章 网络通信 350 实例249 获得内网的所有IP地址 351 实例250 获取网络资源的大小 352 实例251 解析网页中的内容 354 实例252 网络资源的单线程下载 355 实例253 网络资源的多线程下载 357 实例254 下载网络资源的断点续传 359 实例255 建立服务器套接字 362 实例256 建立客户端套接字 363 实例257 设置等待连接的超时时间 364 实例258 获得Socket信息 365 实例259 接收和发送Socket信息 367 实例260 关闭Socket缓冲 369 实例261 使用Socket通信 371 实例262 防止Socket传递汉字乱码 375 实例263 使用Socket传递对象 377 实例264 使用Socket传输图片 379 实例265 使用Socket传输音频 381 实例266 使用Socket传输视频 384 实例267 一个服务器与一个客户端 通信 385 实例268 一个服务器与多个客户端 通信 387 实例269 客户端一对多通信 389 实例270 客户端一对一通信 391 实例271 基于Socket的数据库编程 393 实例272 使用Proxy创建代理服务器 396 实例273 使用ProxySelector选择 代理服务器 397 实例274 聊天室服务器端 399 实例275 聊天室客户端 401 第17章 数据库操作 405 实例276 JDBC连接MySQL数据库 406 实例277 连接SQL Server 2005数据库 407 实例278 JDBC连接Oracle数据库 408 实例279 获取SQL Server指定数据 库中的数据表信息 409 实例280 获取MySQL指定数据库 中的数据表名称 411 实例281 查看数据表结构 412 实例282 动态维护投票数据库 414 实例283 SQL Server数据备份 416 实例284 SQL Server数据恢复 419 实例285 MySQL数据备份 422 实例286 MySQL数据恢复 424 实例287 动态附加数据库 425 实例288 生成SQL数据库脚本 426 实例289 表中字段的描述信息 429 实例290 将员工信息添加到数据表 430 实例291 添加数据时使用数据验证 431 实例292 插入用户登录日志信息 432 实例293 生成有规律的编号 433 实例294 生成无规律的编号 435 实例295 插入数据时过滤危险字符 436 实例296 复选框保存到数据库 437 实例297 把数据复制到另一张表中 438 实例298 批量插入数据 439 实例299 更新指定记录 440 实例300 在删除数据时给出提示信息 442

Astar,Google小插件,压缩包:1.0.3_0.zip

AStar技术,浏览器插件,/出国/人士常用,是个T—Z,很稳定,分享给大家。 ---------------以下资源具体描述(cou50zi):Zipkin 是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper 的论文设计而来,由 Twitter公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据,用来追踪微服务架构下的系统延时问题。应用系统需要进行装备(instrument)以向 Zipkin 报告数据。

Java基础核心技术:面向对象编程(day05-day07)

本套Java视频完全针对初级学员,课堂实录,自发布以来,好评如潮!Java视频中注重与学生互动,讲授幽默诙谐、细致入微,覆盖Java基础所有核心知识点,同类Java视频中也是代码量大、案例多、实战性强的。同时,本Java视频教程注重技术原理剖析,深入JDK源码,辅以代码实战贯穿始终,用实践驱动理论,并辅以必要的代码练习。 通过20的课程学习,使学员掌握java核心语法、面向对象思想编程、异常处理、IO流、集合类、多线程、网络编程等。

EXCEL VBA编程(excel办公高手必经之路)

宏基础 VBA编程基础 常用语句(分支、循环语句的基础及应用) VBA结合工作表的函数功能的应用等 如果您会了所有的excel技能都不能解决工作的数据问题。那请选择VBA技术完成。本季主要讲解关于VBA的基础知识。为走向更高阶的excel技术打下基础。为更高效的办公打下基础。

EndNoteX9 汉化+原版_破解版安装包

EndNote X9最新版,包括汉化版本和原版本,汉化方法: 1、双击[ENX9Inst.msi]安装EndNote X9,安装时选择试用,安装完成后不要运行EndNote; 2、如果想使用汉化版,可以将CHS文件夹里的[EndNote.exe]拷贝到EndNote的安装目录下,替换原文件即可汉化、破解。 3、如果想使用英文版,可以将ENG文件夹里的[EndNote.exe]拷贝到EndNote的安装目录下,替换原文件即可直接破解。 注意:不论用的是英文版还是中文版,替换之后即可破解,无需输入序列号。

C语言实战之学生成绩管理系统

通过C语言开发一个简单的项目:学生成绩管理系统 1.C语言知识点的综合运用,加深对C语言的理解,学会结构化编程的思想 2.熟悉企业软件开发的基本流程,树立软件工程的思维和概念 3.具备独立开发一个小型甚至中型软件的能力:XX管理系统 4.具备企业初级工程师的能力和水平,实现从学生到工程师的初级跨越 关注更多新教程,可以关注微信号:armlinuxfun(嵌入式工程师自我修养) 让学生通过一个C语言项目的开发,熟悉软件工程流程,树立软件工程和模块化编程的概念和思维,具备独立开发一个小型甚至中型C语言项目的能力。完成从学生到企业初级工程师的零基础跨越。

打通Linux脉络系列:进程、线程和调度

本课程分成4个组成部分,每次课60分钟,每次课后留下3-4个练习题,可以在Linuxer公众号留言讨论答案和做题心得。 第一部分:深入彻底搞清楚进程生命周期,进程生命周期创建、退出、停止、以及僵尸是个什么意思; 第二部分:深入分析进程创建的写时拷贝技术、以及Linux的线程究竟是怎么回事(为什么称为轻量级进程),此部分也会搞清楚进程0、进程1和托孤,以及睡眠时的等待队列; 第三部分:搞清楚Linux进程调度算法,不同的调度策略,实时性,完全公平调度算法; 第四部分:讲解Linux多核下CPU、中断、软负载均衡、cgroups调度算法以及Linux为什么不是一个实时操作系统。 掌握Linux脉络知识:进程、线程和调度。

javaweb mooc在线系统案例实战

讲解在线mooc系统的开发,从需求分析到类图设计,数据库设计,架构设计,代码编写等等。 掌握java web开发实战

相关热词 c#编译器 学习 c#和其他语言相比 c# 什么是管道 c# 在ui线程中运行 c# 动态增加枚举 c# panel边框 c#调用dll报错 c# 编写dll c# dll修复工具 c# timer 多线程