【问题标题】:Get rid of background stripes (Python, OpenCV)摆脱背景条纹(Python、OpenCV)
【发布时间】:2018-02-12 22:52:53
【问题描述】:

我正在尝试一个项目,我必须在其中提取一个正方形,特别是一张身份证。

问题发生在刚开始时,当我尝试检测(并在提取后)卡片时。 我正在使用 Canny Edge 和这段代码:

import cv2
import numpy as np

card = cv2.imread('card.png')
card = cv2.resize(card, (800, 800))

gray = cv2.cvtColor(card, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
cv2.imshow("Gray", gray)
cv2.waitKey(0)

# detect edges in the image
edged = cv2.Canny(gray, 10, 250)
cv2.imshow("Edged", edged)
cv2.waitKey(0)

# construct and apply a closing kernel to 'close' gaps between 'white'
# pixels
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))
closed = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel)
cv2.imshow("Closed", closed)
cv2.waitKey(0)

对于这张图片(为了隐私而手动应用模糊),这是 Canny edge 的结果..

这是普通卡片的结果(应用模糊后)

我的问题是 2:如何摆脱背景条纹?如何最终缩小最后一张图像中的间隙(由于模糊,它在第一个处理的图像中关闭,但以最后一个作为用例)?

奖金

我将其添加为替代源(以及我的结果 - 封闭内核)

谢谢

【问题讨论】:

    标签: python opencv canny-operator


    【解决方案1】:

    尝试将其转换为 hsv 颜色空间,而不是将图像转换为 gray_scale。并使用饱和通道进行边缘检测。代码及结果:

    import cv2
    import numpy as np
    
    card = cv2.imread('inputs/Idcard.jpg')
    hsv = cv2.cvtColor(card, cv2.COLOR_BGR2HSV)
    blur = cv2.GaussianBlur(hsv[:,:,1],(7,7),0)
    edged = cv2.Canny(blur, 10, 250)
    cv2.imwrite("Edged.jpg", edged)
    

    【讨论】:

    • 感谢您的回答。这似乎是这样,但我无法达到相同的结果。问题可能是图像太大了? Example 因为如果我将图像调整为更小的图像,没关系,代码可以工作,但几乎不可能进行下一步(OCR)。
    • 您可以找到轮廓并获得面具。使用带有原始图像的蒙版进行 OCR。如有必要,请发布另一个问题,因为解决方案会变得更长。
    • @Link 您找到解决问题的方法了吗?而 OCR 呢?我正在尝试做同样的事情......
    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多