如何用opencv求图像中单像素曲线的长度

degree_37 2012-04-23 10:40:06
对图像中一个细长条形状物体,识别出来后,用细化算法提取了骨架,但是如何测量该骨架的长度呢,查知opencv中有cvArcLength函数可以求曲线长度,但我这个曲线只是在图像中,没有独立存储为curve,也不太清楚这个函数中CvSlice的含义,请牛人给出解决方法
...全文
1440 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
libralibra 2013-05-02
  • 打赏
  • 举报
回复
引用 5 楼 woshicaiyuyu 的回复:
[quote=引用 2 楼 libralibra 的回复:] 骨架化后是单像素曲线,二值一下只有0(背景)和1(曲线), 对二值图像矩阵直接求和
你好 我想请问你下 ,二值矩阵要怎么求和[/quote] 值只有0和1,双重循环加在一起就行了啊
woshicaiyuyu 2013-05-02
  • 打赏
  • 举报
回复
引用 2 楼 libralibra 的回复:
骨架化后是单像素曲线,二值一下只有0(背景)和1(曲线), 对二值图像矩阵直接求和
你好 我想请问你下 ,二值矩阵要怎么求和
libralibra 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

同一图像中可能有多条曲线,而且如果斜曲线不能直接求和吧
[/Quote]

建一个跟原二值图一样大小的新图,所有点都是0
然后用一个当前最大标记maxInd初始化为0,然后去扫原二值图

if 当前位置原二值图是1
if 新图中当前位置八邻域都是0
if 栈为空
标记新图当前位置为++maxInd
else
标记为栈顶标号
栈顶出栈
else
if 栈为空
标记为新图当前位置八邻域中的非零标号
这里比较复杂的情况是八邻域内标号不唯一,需要设置当前标号为较小值合并所有其它标号位置
将被合并的标号入栈
else
标记为栈顶标号
栈顶出栈
返回maxInd
===========
扫描完后,得到一副跟原图同样大小,所有连通区域用不同标号区分的图,同时有maxInd
循环curInd=1到maxInd,扫描原图中所有像素等于curInd的点求和
可以求出来所有线的面积
ljbsdu 2012-04-24
  • 打赏
  • 举报
回复
你如果已经细化出来了,那直接统计细化后二值图像的面积不就是曲线长度了,或者再除以曲线的宽度
degree_37 2012-04-24
  • 打赏
  • 举报
回复
同一图像中可能有多条曲线,而且如果斜曲线不能直接求和吧
libralibra 2012-04-24
  • 打赏
  • 举报
回复
骨架化后是单像素曲线,二值一下只有0(背景)和1(曲线),
对二值图像矩阵直接求和

4,499

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧