开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

楼主: z13228604287
收起左侧

[技术专题] Opencv SIFT特征点匹配 模版匹配 小地图拼接【实现论证】

[复制链接]
发表于 2025-5-28 08:27:07 | 显示全部楼层   河北省邯郸市
感谢分享!感谢分享!感谢分享!
回复 支持 反对

使用道具 举报

发表于 2025-5-27 20:18:40 | 显示全部楼层   山东省临沂市
感谢分享,正好需要,非常感谢
回复 支持 反对

使用道具 举报

结帖率:89% (81/91)

签到天数: 6 天

 楼主| 发表于 2025-5-26 20:06:00 | 显示全部楼层   江苏省苏州市
  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
图片集数组容器 
小地图数据矩阵类 
小地图 = 视觉_图像解码 ( #图片1, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片2, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片3, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片4, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片5, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片6, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片7, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片8, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片9, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片10, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片11, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
小地图 = 视觉_图像解码 ( #图片12, #读图_彩色模式 )
图片集.加入数据矩阵类 (小地图)
' 模拟匹配拼接
模版匹配拼接 (图片集, 1500, 20, 2, 0.5, #匹配_归一化相关_标准 )
返回 (0)
子程序名返回值类型公开备 注
模版匹配拼接  
参数名类 型参考可空数组备 注
图片集数组容器
拼接尺寸整数型拼接图像最终大小  要足够大
中心尺寸整数型屏蔽中心区域大小
缩放双精度小数型图像缩放比例
裁剪比例小数型裁剪比例(0.0-1.0)
匹配模式整数型
变量名类 型静态数组备 注
应该退出逻辑型退出标志
拼接图像数据矩阵类最终拼接图像
小地图数据矩阵类 
对齐点坐标二维整型结构 
匹配位置坐标二维整型结构 
缓存图数据矩阵类缓存上一张图像
i整数型 
尺寸变换图数据矩阵类 
x整数型 
y整数型 
整数型 
整数型 
感兴区域矩形整型结构 
目标区域数据矩阵类 
掩码数据矩阵类 
分数双精度小数型 
应该退出 = 假
' 创建显示窗口
视觉_创建窗口 (“拼接结果”, #窗口_普通模式 )
判断循环首 (应该退出 = )
计次循环首 (图片集.成员数 (), i)
小地图 = 图片集.取数据矩阵类 (i)
如果真 (小地图. ())
调试输出 (“图像为空!”)
到循环尾 ()  ' 跳过当前图像,继续处理下一个

' 调整图像大小
视觉_尺寸变换 (小地图, 尺寸变换图, , 缩放, 缩放, #插值_双线性三次 )
' 第一张图像处理(作为基准)
判断 (拼接图像. ())
' 创建空白拼接图像
拼接图像.初始化零 (拼接尺寸, 拼接尺寸, #矩阵_三通道字节型U )
' 计算图像居中放置的位置
x (拼接尺寸 - 尺寸变换图.列数) ÷ 2
y (拼接尺寸 - 尺寸变换图.行数) ÷ 2
宽 = 尺寸变换图.列数
高 = 尺寸变换图.行数
' 检查ROI是否越界
如果真 (x < 0 y < 0 x + 宽 > 拼接图像.列数 y + 高 > 拼接图像.行数)
调试输出 (“警告:第一张图像位置越界,无法初始化拼接图像”)
拼接图像.释放 ()
应该退出 = 真
跳出循环 ()
' 创建感兴趣区域(ROI)并将图像复制到中心位置
感兴区域.初始化 (x, y, 宽, 高)
目标区域 = 拼接图像.感兴区域 (感兴区域)
掩码 = 创建中心掩码 (尺寸变换图, 中心尺寸)
尺寸变换图.复制 (目标区域, )
对齐点.横坐标 = x
对齐点.纵坐标 = y
分数 = 执行模板匹配 (缓存图, 尺寸变换图, 裁剪比例, 中心尺寸, 匹配位置, 匹配模式)
如果 (分数 < 0)
调试输出 (“错误:模板匹配失败,跳过当前图像”)
到循环尾 ()
调试输出 (“匹配分数:”, 分数, “[”, 匹配位置.横坐标, 匹配位置.纵坐标, “]”)
' 更新对齐点 计算图像放置的位置
对齐点.横坐标 = 对齐点.横坐标 + 匹配位置.横坐标
对齐点.纵坐标 = 对齐点.纵坐标 + 匹配位置.纵坐标
调试输出 (“拼接位置:[”, 对齐点.横坐标, 对齐点.纵坐标, “]”)
' 检查ROI是否越界
如果真 (对齐点.横坐标 < 0 对齐点.纵坐标 < 0 x + 尺寸变换图.列数 > 拼接图像.列数 y + 尺寸变换图.行数 > 拼接图像.行数)
调试输出 (“警告:图像位置越界,跳过当前图像”)
到循环尾 ()
' 创建感兴趣区域并将图像复制到对应位置
感兴区域.初始化 (对齐点.横坐标, 对齐点.纵坐标, 尺寸变换图.列数, 尺寸变换图.行数)
目标区域 = 拼接图像.感兴区域 (感兴区域)
掩码 = 创建中心掩码 (尺寸变换图, 中心尺寸)
尺寸变换图.复制 (目标区域, )
' 显示拼接结果
视觉_显示图像 (“拼接结果”, 拼接图像)
' 检查是否有按键事件,任意键跳出循环
如果真 (视觉_等待按键 (100) ≥ 0)
跳出循环 ()
' 缓存当前图像,用于下一次比对
缓存图 = 尺寸变换图.克隆 ()
计次循环尾 ()
' 等待用户按键决定是否继续或退出
如果真 (视觉_等待按键 (1000) = 27)
应该退出 = 真
拼接图像.释放 ()
判断循环尾 ()
子程序名返回值类型公开备 注
是否支持掩码逻辑型 判断匹配方法是否支持掩码
参数名类 型参考可空数组备 注
匹配模式整数型
返回 (匹配模式 = #匹配_平方差 匹配模式 = #匹配_平方差_标准 匹配模式 = #匹配_相关_标准 匹配模式 = #匹配_归一化相关_标准 )
子程序名返回值类型公开备 注
创建中心掩码数据矩阵类 创建中心区域蒙版(用于屏蔽图像中心区域)
参数名类 型参考可空数组备 注
数据矩阵类
中心尺寸整数型
变量名类 型静态数组备 注
蒙版数据矩阵类 
中心X整数型 
中心Y整数型 
半径整数型 
X1整数型 
Y1整数型 
X2整数型 
Y2整数型 
' 创建全白蒙版(255表示不屏蔽)
蒙版.初始化 (图.行数, 图.列数, 0, 标量 (255))
' 计算中心区域
中心X = 图.列数 ÷ 2
中心Y = 图.行数 ÷ 2
半径 = 中心尺寸 ÷ 2
' 确定中心区域的边界(确保不超出图像范围)
X1 = 视觉_取最大值 (0, 中心X - 半径)
Y1 = 视觉_取最大值 (0, 中心Y - 半径)
X2 = 视觉_取最小值 (图.列数 - 1, 中心X + 半径)
Y2 = 视觉_取最小值 (图.行数 - 1, 中心Y + 半径)
' 将中心区域设为黑色(0表示屏蔽)
如果真 (X2 > X1 Y2 > Y1)
蒙版.感兴区域 (矩形整型 (X1, X2, X2 - X1, Y2 - Y1)).设置 (标量 (0), )
返回 (蒙版)
子程序名返回值类型公开备 注
取子模板数据矩阵类 
参数名类 型参考可空数组备 注
输入图像数据矩阵类
裁剪小数型裁剪比例(0.0-1.0),表示裁剪后图像占原始图像的比例
裁剪X整数型水平方向裁剪的位置
裁剪Y整数型垂直方向裁剪的位置
变量名类 型静态数组备 注
整数型 
整数型 
复制宽整数型 
复制高整数型 
开始X整数型 
开始Y整数型 
裁剪区域矩形整型结构 
' 确保裁剪比例在有效范围内
裁剪 = 视觉_取最大值 (0, 视觉_取最小值 (1, 裁剪))
' 获取图像尺寸
宽 = 输入图像.列数
高 = 输入图像.行数
' 计算裁剪区域的大小
复制宽 = 宽 × 裁剪
复制高 = 高 × 裁剪
' 计算裁剪区域的起始坐标(居中裁剪)
开始X (宽 - 复制宽) ÷ 2
开始Y (高 - 复制高) ÷ 2
' 创建裁剪区域的矩形
裁剪区域.初始化 (开始X, 开始Y, 复制宽, 复制高)
' 输出裁剪坐标
裁剪X = 开始X
裁剪Y = 开始Y
' 裁剪图像并返回
返回 (输入图像.感兴区域 (裁剪区域))
子程序名返回值类型公开备 注
执行模板匹配双精度小数型 
参数名类 型参考可空数组备 注
源图像数据矩阵类
模板图像数据矩阵类
裁剪比例小数型用于裁剪模板图像中心区域
中心尺寸整数型屏蔽中心区域大小
最佳匹配位置坐标二维整型结构
匹配方法整数型模板匹配方法
变量名类 型静态数组备 注
裁剪X整数型 
裁剪Y整数型 
子模版数据矩阵类 
掩码数据矩阵类 
结果数据矩阵类 
最小值双精度小数型 
最大值双精度小数型 
最小值坐标坐标二维整型结构 
最大值坐标坐标二维整型结构 
分数双精度小数型 
绘制图数据矩阵类 
' 确保输入图像有效
如果真 (源图像. () 模板图像. ())
调试输出 (“错误:源图像或模板图像为空!”)
返回 (-1)
' 确保模板尺寸不大于源图像
如果真 (模板图像.行数 > 模板图像.行数 源图像.列数 > 源图像.列数)
调试输出 (“错误:模板尺寸大于源图像!”)
返回 (-1)
子模版 = 取子模板 (模板图像, 裁剪比例, 裁剪X, 裁剪Y)
' 检查是否成功提取子模板
如果真 (子模版. ())
调试输出 (“错误:未能提取有效模板!”)
返回 (-1)
' 创建掩码并检查是否支持使用掩码
如果 (是否支持掩码 (匹配方法))
掩码 = 创建中心掩码 (子模版, 中心尺寸)
如果真 (掩码. ())
调试输出 (“错误:未能创建有效掩码!”)
返回 (-1)

调试输出 (“警告:所选匹配方法不支持掩码,将不使用掩码进行匹配”)
' 执行模板匹配
判断 (是否支持掩码 (匹配方法) 掩码. ())
视觉_模板匹配 (源图像, 子模版, 结果, 匹配方法, 掩码)
视觉_模板匹配 (源图像, 子模版, 结果, 匹配方法, )
' 查找最佳匹配位置
视觉_最小最大位置 (结果, 最小值, 最大值, 最小值坐标, 最大值坐标, )
' 根据匹配方法确定最佳匹配位置
如果 (匹配方法 = #匹配_平方差 匹配方法 = #匹配_平方差_标准 )
分数 = 1 - 最小值
最佳匹配位置.横坐标 = 最小值坐标.横坐标 - 裁剪X
最佳匹配位置.纵坐标 = 最小值坐标.纵坐标 - 裁剪Y
分数 = 最大值



i支持库列表   支持库注释   
OpenCV(未知支持库)
spec特殊功能支持库

回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2025-5-26 16:46:23 | 显示全部楼层   广东省广州市

感谢分享!感谢分享!感谢分享!
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2025-5-25 23:26:19 | 显示全部楼层   湖南省邵阳市
感谢分享!感谢分享!感谢分享!
回复 支持 反对

使用道具 举报

发表于 2025-5-25 17:05:44 | 显示全部楼层   海南省白沙黎族自治县
感谢分享!感谢分享!感谢分享!
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 2025-5-25 17:05:36 | 显示全部楼层   江苏省南京市
看看是不是广告帖
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 1 天

发表于 2025-5-25 01:52:32 | 显示全部楼层   广东省广州市
RE: Opencv SIFT特征点匹配 模版匹配 小地图拼接【实现论证】 [修改]
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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