ZBTBL 晚上好🌙🌙🌙
本答案参考ChatGPT-3.5
在OpenCV中,轮廓的绘制方式确实是将轮廓的每个点按照顺序连接起来的。但是由于图像中可能存在分支点或连接不连续的情况,所以在绘制轮廓时,可能会出现折返的情况。这是正常现象,绘制的连接线应该是正确的。
对于你的项目,从细化的汉字图像中提取轮廓是一个复杂的任务。你可以尝试以下方法来解决问题:
1. 根据图像的特点进行预处理
- 先进行二值化操作,将图像转换为黑白形式。
- 然后进行细化操作,使得图像中的线条更加细化。
2. 使用findContours方法提取轮廓
- 使用
findContours方法提取轮廓并存储在List中。 - 注意,
findContours方法返回的轮廓是有序的,可以根据需要进行排序。
3. 使用ApproxPolyDP进行轮廓近似
- 使用
ApproxPolyDP方法对提取的轮廓进行近似,以减少点的数量。 - 这样可以提高后续处理的效率,并从轮廓中得到更精确的笔画结构信息。
4. 使用drawContours方法绘制轮廓
- 使用
drawContours方法绘制近似后的轮廓。 - 绘制完成后,得到一个存储图像轮廓的Mat。
5. 提取笔画结构信息
- 使用
MatOfPoint转换为ArrayList。 - 按照你的需要,按顺序逐点绘制轮廓的数据点。
- 可以根据需要,将轮廓的点连接成线条,以便更好地理解笔画结构信息。
至于分支点的处理,OpenCV并没有直接提供相关函数,需要自己进行处理。你可以根据轮廓点的连续性来判断是否有分支点,然后根据需要进行分支点的重复连接。
希望以上解决方案对你有帮助。