【问题标题】:How to deskew of an image using opencv in python? [closed]如何在 python 中使用 opencv 对图像进行歪斜校正? [关闭]
【发布时间】:2017-05-11 10:29:16
【问题描述】:

下面的图片将说明我想要什么。

图像包含 4 个参考矩形,作为图像校正的基础。假设,图像包含一些其他信息,如文本、圆形和矩形。现在,我想编写一个脚本来根据四个矩形拉直图像。我的结果图像应该是拉直的。所以我可以在纠偏后提取一些信息。 我正在使用 OpenCV python,请告诉我实现此目的的方法。 请显示一些代码作为 OpenCV Python 的示例。enter image description here 之后它必须像 enter image description here

【问题讨论】:

  • 使用 opencv 的 findHomography 函数与从参考矩形获得的匹配点查找 Homography 矩阵,然后使用 warpPerspective 对其进行校正。
  • @Optimus 1072 这确实是一个很好的解决方案,但单应性适用于固定点,如源到目标。在我的情况下,随着图像的变化,四个参考矩形并不固定。因为图像模板具有相似的矩形但不是固定点。所以我需要一些代码/方法来仅基于它来进行纠偏。
  • 我想我还没有正确理解你的问题。您是否需要算法来找到目标区域,如果不需要,那么 Homography 将起作用,因为您可以在四个角(目标)中找到目标四个矩形,否则问题不在于偏斜。
  • 实际情况是: 1] 一张评估表包含4个实心黑色方块。里面有一些信息,比如学生的卷号,科目有。 2]此表首先由扫描仪以 200 dpi 扫描并存储在文件夹中。 3]现在这张表是通过获取卷号在线评估的。和主题 4] 在获取此类信息之前,扫描图像必须正确对齐,否则 OCR 将无法正确获取信息。分析图像我发现图像有 4 个矩形,可以帮助校正图像。由于我是使用 python 的 opencv 新手,所以我无法获得解决方案。
  • 所以这4个矩形在不同图像中的位置相同或不同。如果它们相同 Homography 是解决方案,如果它们不同,那么您可以选择倾斜图像的一个角并通过给出宽度和高度来定义目标(校正)角(我猜每次都是相同的)。跨度>

标签: python opencv image-processing


【解决方案1】:

我终于解决了。

contours, hierarchy = cv2.findContours(img_dilate.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

points=[]
i=0
for contour in contours:
    area = cv2.contourArea(contour)
    if area > 10 and area < 800:
        x,y,w,h = cv2.boundingRect(contour)
        cv2.rectangle(img_dilate,(x,y),(x+w,y+h),(0,255,0),2)
        center = (int(x),int(y))
        position = (center[0], center[1])
        points.append(position)
        print position,i
        text_color = (255,0,255)
        cv2.putText(resized,str(i+1), position, cv2.FONT_HERSHEY_SIMPLEX, 0.5, text_color, 2)
        i=i+1
pnts = np.array(points)
rect = cv2.minAreaRect(pnts)
box = cv2.cv.BoxPoints(rect)
box = np.int0(box)
cv2.drawContours(resized,[box],0,(0,255,0),2)

root_mat = cv2.getRotationMatrix2D(rect[0], angle , 1)
rotated = cv2.warpAffine(resized, root_mat, dim, flags=cv2.INTER_CUBIC)
cv2.getRectSubPix(rotated, dim, center) 

【讨论】:

  • @Rashmi - 我也在尝试使用 python opencv 校正图像。你能告诉我什么是“img_dilate”吗?能否提供完整的源代码
  • 角度是从哪里得出的?它被传递到 getRotationMatrix2D()
  • 代码不完整。请提供一个完整的例子来重现。
猜你喜欢
  • 2019-06-19
  • 2018-10-19
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多