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

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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年5月8日
下一篇 2022年5月8日

相关推荐