python - 如何将 OpenCV 找到的轮廓转换为平滑样条或贝塞尔曲线
问题描述
我正在对颜色位图进行矢量化:很快,我找到了颜色的数量,将每种颜色提取为黑白蒙版,并检测轮廓,然后将所有内容作为 SVG 转储到文件中。但是由于颜色边缘的轮廓非常脆和粗糙,结果很差。此外,我得到了很多噪音(“盐和胡椒”),这为输出添加了太多的小轮廓。
为了消除“盐和胡椒”,我尝试在轮廓检测之前应用不同的模糊效果(中值模糊、高斯)以及形态算子(腐蚀/扩张/打开/关闭),它们都不适合我的情况,因为它们会模糊甚至去除必须保持清晰的微小物体/轮廓。
最后,我最终想到了将检测到的轮廓中的一组点转换为样条曲线或贝塞尔曲线的想法,但还没有找到一种方法来处理 cv2.findContour(...) 返回的数组。
作为一个实验,我试图应用c = cv2.approxPolyDP(c, simplification_param, False)
到轮廓上,但它们变得更加棱角分明和破碎,而不是平滑和连续。
有没有办法将 cv2.approxPolyDP(...) 的结果转换为样条曲线或使用其他库来获得与 approxPolyDP 相同但使用贝塞尔曲线的结果?
这些是我用来通过 cv2.findContours(...) 确定轮廓的黑白蒙版示例。最终,它们应该被转换为平滑的连续曲线(不一定是连接或闭合的轮廓)。
谢谢!
解决方案
推荐阅读
- types - XGBoost 的数据类型
- google-bigquery - 在 bigquery 中使用 DBSCAN 进行聚类
- mysql - MySQL 使用运行总计来选择记录
- apache-kafka-connect - Debezium for MySQL 1.6.0 - io.debezium.DebeziumException:arraycopy:长度 -1 为负
- javascript - 在reduce函数中的数组内创建子数组
- javascript - 正则表达式将电子邮件拆分为数组
- python - 我如何让它不删除字典的其余部分
- reactjs - 如何使用 react-i18next 提供的 Trans 组件插入两个标签?
- core-web-vitals - 如何使用 Web Vitals js sdk 将 LCP 调试为 CLS?
- curl - 谷歌驱动器表单图像下载上的卷曲失败