Opencv-Python图像预处理之手掌指纹提取@TOC[0]
读取图像
首先用到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)
'''
边缘检测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()
文章出处登录后可见!
已经登录?立即刷新