Opencv-Python图像预处理之手掌指纹提取@TOC
首先用到Opencv的imread()函数将要预处理的图像进行读取
'''
读取图像
'''
img = cv2.imread("/home/wei/test.jpg", -1)
img = cv2.resize(img, (960, 640)) #由于原图太大,所以压缩一下图像的小
使用Opencv的cvtColor()函数,参数设置cv2.COLOR_RGB2GRAY(RGB图像转GRAY)
'''
图像灰度化
'''
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
'''
图像灰度化
'''
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imshow("img_gray", img_gray)
左边为原图,右边为增强对比度后的图像
'''
边缘检测Laplacian
'''
img_Laplacian = cv2.Laplacian(o, cv2.CV_8U, o, ksize = 5)
cv2.imshow('img_Laplacian', img_Laplacian)
在进行了边缘检测之后,会发现,即使纹路提取出来了,但是存在很多噪点,以及纹路并不清晰干练,接下来要进行形态学操作。
先进行腐蚀再进行膨胀就叫做开运算。开运算 (image)= 膨胀 (腐蚀 (image))
图像被腐蚀后,去除了噪声,但会压缩图像;对腐蚀过的图像进行膨胀处理,可以去除噪声并保持原有形状。
'''
开运算
'''
kernel = np.ones((2,2), np.uint8)
erosio1 = cv2.erode(img_Laplacian, kernel, iterations = 1)
dilate1 = cv2.dilate(erosio1, kernel, iterations = 1)
res = np.hstack((erosio1,dilate1))
cv2.imshow("res", res)
左边是进行了腐蚀,右边则是对腐蚀后的图像进行膨胀操作(开运算)。
很明显,边界部分的很多噪点已经处理了,并且掌纹线路更加清晰。
随后在进行简单的双边滤波再次进行去噪就能得到效果图。
'''
滤波
'''
img_final = cv2.bilateralFilter(dilate1, 150, 80, 80)
cv2.imshow('img_final', img_final)
可能最终效果并不是很好,欢迎各位前辈指导
最后附上完整代码!!!
import cv2
import os
import numpy as np
'''
读取图像
'''
img = cv2.imread("/home/wei/test.jpg", -1)
img = cv2.resize(img, (960, 640)) #由于原图太大,所以压缩一下图像的小
'''
图像灰度化
'''
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imshow("img_gray", img_gray)
'''
增加图像对比度
'''
scal = 1.7
o = img_gray * float(scal)
o[o>255] = 255
o = np.round(o)
o = o.astype(np.uint8)
img_par = np.hstack((img_gray, o))
cv2.imshow("img_par", img_par)
'''
边缘检测Laplacian
'''
img_Laplacian = cv2.Laplacian(o, cv2.CV_8U, o, ksize = 5)
cv2.imshow('img_Laplacian', img_Laplacian)
'''
开运算
'''
kernel = np.ones((2,2), np.uint8)
erosio1 = cv2.erode(img_canny, kernel, iterations = 1)
dilate1 = cv2.dilate(erosio1, kernel, iterations = 1)
res = np.hstack((erosio1,dilate1))
cv2.imshow("res", res)
'''
滤波
'''
img_final = cv2.bilateralFilter(dilate1, 150, 80, 80)
cv2.imshow('img_final', img_final)
cv2.waitKey()
cv2.destroyAllWindows()