开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 11076|回复: 4
收起左侧

[技术专题] 如何找到轮廓的真实宽度和高度

[复制链接]
结帖率:89% (79/89)
发表于 2022-7-8 16:36:59 | 显示全部楼层 |阅读模式   江苏省苏州市
有3个形状的图像
leaf.jpg
如果用直接寻找轮廓,最小矩形,我会得到结果
15320990737871219.png
但事实上,我在 RED 中找出的轮廓 1 和轮廓 2 没有得到正确的宽度和高度。
我想要的应该是这个
15320992875250901.png
实现步骤
  • 找到形状的主轴 (PCA)
  • 旋转到直立(翘曲)
  • boundingRect()(图像轴对齐)



  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
多维矩阵类 
灰度化多维矩阵类 
dRet逻辑型 
轮廓集多维数组点2i类 
计次1整数型 
面积双精度小数型 
位置点2f类 
xmin整数型 
xmax整数型 
ymin整数型 
ymax整数型 
计次2整数型 
方向双精度小数型 
lt点2i类 
ld点2i类 
rd点2i类 
rt点2i类 
图 = 视觉_图像解码 ( #图片1, #读图_彩色 )
视觉_下采样 (图, 图, , 4)
视觉_下采样 (图, 图, , 4)
视觉_颜色空间转换 (图, 灰度化, #颜色_BGR转GRAY, 0)
视觉_阈值 (灰度化, 灰度化, 150, 255, #阈值_二进制 )
视觉_查找轮廓 (灰度化, 轮廓集, , #检测_列表, #逼近_任何, )
计次循环首 (轮廓集.尺寸 (), 计次1)
面积 = 视觉_轮廓面积V (轮廓集, 计次1, )
如果真 (面积 < 100 100000 < 面积)
到循环尾 ()
方向 = 获取方向 (轮廓集.取点2i类数组 (计次1), 位置)
xmin = 99999
xmax = 0
ymin = 99999
ymax = 0
计次循环首 (轮廓集.成员尺寸 (计次1), 计次2)
轮廓集.写元素 (计次1, 计次2, 旋转后获取点 (轮廓集.读元素 (计次1, 计次2), 位置, 方向))
如果真 (轮廓集.读元素 (计次1, 计次2).左边 < xmin)
xmin = 轮廓集.读元素 (计次1, 计次2).左边
如果真 (轮廓集.读元素 (计次1, 计次2).左边 > xmax)
xmax = 轮廓集.读元素 (计次1, 计次2).左边
如果真 (轮廓集.读元素 (计次1, 计次2).顶边 < ymin)
ymin = 轮廓集.读元素 (计次1, 计次2).顶边
如果真 (轮廓集.读元素 (计次1, 计次2).顶边 > ymax)
ymax = 轮廓集.读元素 (计次1, 计次2).顶边

计次循环尾 ()
lt.初始化 (xmin, ymin)
ld.初始化 (xmin, ymax)
rd.初始化 (xmax, ymax)
rt.初始化 (xmax, ymin)
视觉_绘制轮廓 (图, 轮廓集, 计次1, 标量 (0, 0, 255), 2, 8, , 2147483647, )
lt = 旋转后获取点 (lt, 位置, -方向)
ld = 旋转后获取点 (ld, 位置, -方向)
rd = 旋转后获取点 (rd, 位置, -方向)
rt = 旋转后获取点 (rt, 位置, -方向)
视觉_线 (图, lt, ld, 标量 (0, 255, 255), 2, 8, 0)
视觉_线 (图, lt, rt, 标量 (0, 255, 255), 2, 8, 0)
视觉_线 (图, rd, ld, 标量 (0, 255, 255), 2, 8, 0)
视觉_线 (图, rd, rt, 标量 (0, 255, 255), 2, 8, 0)
计次循环尾 ()
视觉_显示图像 (“小白鼠”, 图)
视觉_等待按键 (0)
调试输出 (“完成”)
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
旋转后获取点点2i类 
参数名类 型参考可空数组备 注
输入点点2i类
中心点2f类
角度双精度小数型
变量名类 型静态数组备 注
返回点点2i类 
返回点.左边 (输入点.左边 - 中心.左边) × 求余弦 (-1 × 角度) (输入点.顶边 - 中心.顶边) × 求正弦 (-1 × 角度) + 中心.左边
返回点.顶边 (输入点.左边 - 中心.左边) × 求正弦 (-1 × 角度) (输入点.顶边 - 中心.顶边) × 求余弦 (-1 × 角度) + 中心.顶边
返回 (返回点)
子程序名返回值类型公开备 注
获取方向双精度小数型 
参数名类 型参考可空数组备 注
点2i类
位置点2f类
变量名类 型静态数组备 注
数据_点多维矩阵类 
i整数型 
PCA_分析主成分分析类 
特征向量点2d类2
特征向值双精度小数型2
' 构造 pca 分析使用的缓冲区
数据_点 = 矩阵 (取数组成员数 (), 2, #Cv双精度小数型_单通道, )
变量循环首 (0, 数据_点.行数 () - 1, 1, i)
数据_点.置元素 (i, 0, 点 [i + 1].左边)
数据_点.置元素 (i, 1, 点 [i + 1].顶边)
变量循环尾 ()
' 执行 PCA 分析
PCA_分析.运算 (数据_点, , 0, 0)
' 存储对象的位置
位置.初始化 (PCA_分析.平均 ().取元素 (0, 0), PCA_分析.平均 ().取元素 (0, 1))
' 存储特征值和特征向量
变量循环首 (0, 1, 1, i)
特征向量 [i + 1].初始化 (PCA_分析.特征向量 ().取元素 (i, 0), PCA_分析.特征向量 ().取元素 (i, 1))
特征向值 [i + 1] = PCA_分析.特征值 ().取元素 (i, 0)
变量循环尾 ()
返回 (求反正切 (特征向量 [1].顶边, 特征向量 [1].左边))
子程序名返回值类型公开备 注
求反正切双精度小数型 atan2
参数名类 型参考可空数组备 注
x双精度小数型
y双精度小数型
变量名类 型静态数组备 注
ret双精度小数型 
置入代码 ({ 221, 69, 8, 221, 69, 16, 217, 243, 221, 93, 248 })
返回 (ret)


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


15355535359674262.jpg

点评

论坛的人都这么厉害的吗   新疆维吾尔自治区乌鲁木齐市  发表于 2022-7-8 20:53

发表于 2022-11-1 20:29:58 | 显示全部楼层   山东省青岛市
66666666666666666666
回复 支持 反对

使用道具 举报

结帖率:86% (44/51)

签到天数: 2 天

发表于 2022-7-8 19:54:12 | 显示全部楼层   湖南省长沙市
学到了学到了学到了学到了
回复 支持 反对

使用道具 举报

签到天数: 22 天

发表于 2022-7-8 17:58:23 | 显示全部楼层   广东省广州市
看着有点烧脑哦!
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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