python - 从 Python 中的二进制图像获取像素边界坐标(不是边缘)
问题描述
我有一个包含单个连续 blob 的二进制图像,没有孔。我想根据边缘像素的外部边缘创建一个多边形对象。我知道如何自己获取边缘像素,但我想要像素边界的实际坐标,顺时针或逆时针排序。所有像素都有整数坐标。
例如,假设我在 (2,2) 处有一个像素。多边形的顶点为: (2.5, 2.5) (2.5, 1.5) (1.5, 1.5) (1.5, 2.5) (2.5, 2.5)
有没有一种精确的、非近似的方法来做到这一点?最好在 Python 中?
解决方案
根据评论,这是我实施的方法:
将所有像素坐标乘以 10,这样我们就只处理整数。
对于每个像素,通过添加 +/- 5 生成 4 个角。例如,对于 (20,20),角为 (25, 25) (25, 15) (15, 15) (15, 25) (25 , 25)。并将所有角存储在一个列表中。
计算每个角的出现次数。如果计数是奇数,则它是 blob 的角。使坐标整数使这一步变得容易。计算浮点数有问题。
将 blob 角坐标除以 10,得到原始分辨率。
使用标准算法顺时针对角进行排序。
推荐阅读
- php - 未定义变量:$table
- html - 在父 div 的底部有浮动按钮
- c++ - std::fstream 将变量保存到文件错误
- javascript - 如何设置 QA Mode Webpack/Webpack Serve?
- ruby-on-rails - 乘客 Phusion 未在 Apache 下检测到 Rails 应用程序
- android - 使用 workmanager 时 Firestore 脱机持久性错误
- dm-script - GMS 中的有效 displayAt() 范围
- javascript - CSS 过渡不适用于移动设备
- javascript - 倒计时文字内容天、分、秒动态移动
- android - 无法解析 com.google.maps.android:android-maps-utils:0.5+