首页 > 解决方案 > 如何从矩形列表中识别直线

问题描述

我的目标是确定 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'

标签: pythonopencvimage-processing

解决方案


推荐阅读