python - 如何在python openCV中计算六边形的内角
解决方案
cv2.CHAIN_APPROX_SIMPLE
正如 parthagar 所建议的那样,确实非常有用,但它通过删除直线中所有“不必要的”点来起作用。如果线条不是完全笔直的,因为它们似乎不在这张照片中,它就不起作用。所以虽然你最终会得到更少的分数,这很好,但几乎可以肯定它不会是你想要的 6 分。
要获得 6 分的近似值,您需要做更多的自定义工作。OpenCV 提供cv2.approxPolyDP
(Tutorial py contour features - 4. Contour Approximation)可用于此目的。它确实需要找到正确的 epsilon 值才能获得正确的点数,但这可以通过暴力破解找到:
#cnt = Your contour to be approximated
points_wanted = 6
precision = 10000
for x in range(precision):
epsilon = (x/precision)*cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)
if approx.shape[0] == points_wanted:
break
结果如下所示。请注意,它不会完全完美,它是一个近似值,但希望它足够接近。找到两点之间角度的方法可以在 parthagars 链接中找到。祝你好运!
推荐阅读
- logging - Serilog.ILogger 可以转换为 Microsoft.Extensions.Logging.ILogger 吗?
- node.js - ReactJS cookie 库无法识别 Express-Session Cookie
- android - 带有电话号码的firebase身份验证
- python - 每次更改都会调用 ipywidget 观察方法多次,为什么?
- amazon-web-services - S3 桶。发生未知错误:操作不适用于语句中的任何资源。如何创建 s3-bucket 策略?
- linux - 安装 speedtest-cli 时的 PIP 警告
- oauth-2.0 - 使用 ORY Hydra 进行 OpenID 会话管理
- javascript - 跨度值更改事件监听器
- mysql - 如何获得按匹配列分组的平均行数?
- php - 在循环php中使用查询函数