如何从矩形列表中识别直线

时间:2019-02-08 10:48:47

标签: python opencv image-processing

我的目标是确定4个相交的点并进行透视变换。

给出一个计算出的矩形[x, y, w, h](从等高线得出)的列表,如何找到一篇论文的4条最佳线。

thread使用minAreaRect来查找非白色像素的区域,但在我的情况下,环境非常嘈杂,即使使用广泛的图像处理算法也无法消除所有白色点已应用。

这是我的处理管道

  • 灰度和二值化
  • 应用形态学操作删除不太可能的字符
  • 使用一组规则(实验值)查找轮廓

我现在正在考虑一种方法,首先找到4条线(左,上,右,下),然后进行去歪斜。

这可能吗?

Link to original Image

Contours

理想的结果应该是这样,可以确定四个点。

enter image description here

更新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'

0 个答案:

没有答案