python - 如何从矩形列表中识别直线
问题描述
我的目标是确定 4 个相交点并进行透视变换。
给定一个计算出的矩形列表[x, y, w, h]
(源自轮廓),如何找到一篇论文的 4 条最佳线条。
该线程用于minAreaRect
查找非白色像素的区域,但在我的情况下,环境非常嘈杂,即使应用了广泛的图像处理算法也无法消除所有白点。
这是我的处理管道
- 灰度和二值化
- 应用形态学操作去除不太可能的字符
- 使用一组规则(实验值)查找轮廓
我现在正在考虑一种方法来获得 4 个相交点,首先找到 4 条线(左、上、右和下),然后进行纠偏。
这有可能吗?
理想的结果是这样的,可以确定四个点。
更新 1
试图将矩形列表转换为点。在这个阶段我只能使用矩形,因为以前的操作不再返回轮廓。
def rectsToPoints(rects):
points = []
for x1, y1, x2, y2 in rects:
x, y, w, h = x1, y1, x2-x1, y2-y1
points.append([
(x, y),
(x+w, y),
(x, y+h),
(x+w, y+h)
])
return np.array(points, dtype=np.int32)
points = rectsToPoints(rects)
minRect = cv2.minAreaRect(points)
类型错误
cv2.error: OpenCV(3.4.3) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/convhull.cpp:137: error: (-215:Assertion failed) total >= 0 && (depth == CV_32F || depth == CV_32S) in function 'convexHull'
解决方案
推荐阅读
- rust - 如何使用 Vulkano 计算着色器计算交换链图像?
- ruby-on-rails - 如何将两个不同 ActiveRecord 关系的 COUNT(*) 组合到一个 SQL 查询中?
- php - 数据库大小会导致内存不足错误吗?
- c# - 如何保护 Windows 窗体中的连接字符串
- sql - 使用 NVL 和静态值有什么不同
- r - R - 将大数据帧并行拆分为列表
- python-3.x - Buildozer 因 pip 依赖关系而失败,“没有有效的依赖关系图”
- csv - 需要使用批处理脚本替换 CSV 文件中的特定文本
- identityserver4 - 身份服务器 - 将自定义参数添加到来自令牌端点的 JSON 响应
- swift - 使 UIViewController 符合 AVCapturePhotoCaptureDelegate 不起作用