【问题标题】:How to get fingerprints using cv2 in Python?如何在 Python 中使用 cv2 获取指纹?
【发布时间】:2021-09-02 19:02:04
【问题描述】:

为了获得更好的指纹提取,您会推荐我什么?我看起来不太好。谢谢你。这是我的代码:

import cv2
import numpy as np

img = cv2.imread("huella.jpg")
img = cv2.resize(img, None, fx=0.7, fy=1.0, interpolation=cv2.INTER_AREA)
w, h = img.shape[:2]
fp = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

sharp = np.array([[-1, -1, -1, -1, -1], [-1, 2, 2, 2, -1], [-1, 2, 8, 2, -1], [-1, 2, 2, 2, -1], [-1, -1, -1, -1, -1]]) / 8
fp = cv2.filter2D(fp, -1, sharp)

fp = cv2.Canny(fp, 45, 45)

cv2.imshow("Original", img)
cv2.imshow("Huella", fp)

cv2.waitKey(0)
cv2.destroyAllWindows()

Images

【问题讨论】:

    标签: python image cv2


    【解决方案1】:

    你需要使用形态学操作。

    首先。尝试使用cv2.dilate(),然后使用cv2.erode()。这应该会移除所有小而远的物体。

    您可以在此处查看完整文档。

    Morphological Transformations

    Eroding and Dilating

    新编辑:

    图像在膨胀和腐蚀时会丢失信息,所以这里有一个删除小的连接组件的脚本。您应该根据需要更改 minSize。

    import cv2
    import numpy as np
    
    
    def remove_small_pixel(img, minSize=50):
        nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(img, None, None, None, 8, cv2.CV_32S)
        sizes = stats[1:, -1]  # get CC_STAT_AREA component
        img2 = np.zeros(labels.shape, np.uint8)
    
        for i in range(0, nlabels - 1):
            if sizes[i] >= minSize:  # filter small dotted regions
                img2[labels == i + 1] = 255
    
        return img2
    

    注意:此脚本仅适用于灰度图像。

    【讨论】:

    • 谢谢。我正在尝试,但我不知道应该在内核中使用什么值。我尝试的一切都不起作用。它膨胀得如此之多或侵蚀得如此之多。
    • 好吧,我想通了。我将编辑答案。
    • 非常感谢。
    猜你喜欢
    • 2023-02-22
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多