Opencv-Python图像预处理之手掌指纹提取

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)

Opencv-Python图像预处理之手掌指纹提取_第1张图片



由于图像进行了二值转化之后,细纹路并没有很明显,此时需要进行对比度增加来突出掌纹``

'''
图像灰度化
'''
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imshow("img_gray", img_gray)

左边为原图,右边为增强对比度后的图像



图像边缘检测(Laplacian)

'''
边缘检测Laplacian
'''
img_Laplacian = cv2.Laplacian(o, cv2.CV_8U, o, ksize = 5)
cv2.imshow('img_Laplacian', img_Laplacian)

Opencv-Python图像预处理之手掌指纹提取_第2张图片在进行了边缘检测之后,会发现,即使纹路提取出来了,但是存在很多噪点,以及纹路并不清晰干练,接下来要进行形态学操作。



开运算

先进行腐蚀再进行膨胀就叫做开运算。开运算 (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)

Opencv-Python图像预处理之手掌指纹提取_第3张图片




可能最终效果并不是很好,欢迎各位前辈指导
最后附上完整代码!!!

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()

你可能感兴趣的:(opencv,python,计算机视觉)