如何在 Python 中使用 cv2 获取指纹?
How to get fingerprints using cv2 in Python?
为了获得更好的指纹提取,您会推荐我什么?我看起来不太好。谢谢你。这是我的代码:
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
需要用到形态学运算
首先。尝试使用 cv2.dilate()
,然后使用 cv2.erode()
。这应该删除所有小而远的对象。
您可以在此处查看完整文档。
新编辑:
图像在膨胀和腐蚀时会丢失信息,所以这里有一个脚本来删除小连通分量。您应该根据需要更改 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
注意:此脚本仅适用于灰度图像。
为了获得更好的指纹提取,您会推荐我什么?我看起来不太好。谢谢你。这是我的代码:
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
需要用到形态学运算
首先。尝试使用 cv2.dilate()
,然后使用 cv2.erode()
。这应该删除所有小而远的对象。
您可以在此处查看完整文档。
新编辑:
图像在膨胀和腐蚀时会丢失信息,所以这里有一个脚本来删除小连通分量。您应该根据需要更改 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
注意:此脚本仅适用于灰度图像。