c++ - 在 OpenCV C++ 中确定蛇的粗细、头部和尾部
问题描述
我正在尝试分析蛇的图像并确定最厚的点,哪一端是头部,哪一端是尾巴。这是原始图像。
到目前为止,我已经通过灰度、二进制处理了图像并处理了蛇的精巧轮廓。
我还通过细化算法获得了精明的骨架,大致是蛇的中心线。
现在我有了 Canny 轮廓和骨架轮廓,可以使用哪些技术来确定蛇体最肥部分的像素宽度以及确定头部和尾部?
我还没有找到任何可用于创建这些测量或从尾部确定头部的 OpenCV C++ 技术。
任何帮助和指导将不胜感激。
解决方案
这是我的建议,假设计算成本不是问题:
- 厚度:对于骨架的每个点,可以通过计算骨架当前点到轮廓每个点的距离并保持最小距离来近似计算局部厚度。那么最厚点就是局部厚度最大的点。
thickness(x_skelet) = min([distance(x_skelet, x_contour) for x_contour in countour])
(是的,我知道这是糟糕的 python 风格的伪代码,希望它有意义) - 耳/尾区别:头尾的主要区别是平均厚度。首先,我会定义尾巴和头部占身体的百分比(乍一看我会说 5%)。然后,使用上面定义的局部厚度,我将计算蛇每侧 5% 点的平均厚度。头部应该是平均厚度最高的一侧。根据定义,尾巴是另一个。
通过查看您的图像,这应该足够强大,可以忽略图像中的小瑕疵。知道这种局部厚度的实现有点接近四肢,但它应该足以满足您的描述。
希望这对你有用。
推荐阅读
- javascript - 无法将谷歌脚本中的分页符添加到通过 for 循环创建的项目中
- excel - 在 Excel 2016 中使用 Excel VBA 创建数据透视表 - 运行时错误 1004
- sql - 将检查约束正则表达式添加到 Oracle 数据库
- angular - 角度反应形式控件中的占位符导致输入状态为脏
- r - %in% 有快捷方式吗?
- python - 在 python 中使用 step 进行块切片
- java - 是否可以在运行时使用 Spring Data 中的 MongoRepository 确定字段?
- jquery - 如何不使用“$.parseJSON”对我的数据进行排序
- excel - Range.TextToColumns 使用一次后输出不一致
- javascript - 在 React 中多次调用 hooks