Python+Qt掌纹识别

程序示例精选

Python+Qt掌纹识别

如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对<<Python+Qt掌纹识别>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

一、所需工具软件

二、使用步骤

        1. 引入库

        2. 代码实现

       3. 运行结果

三、在线协助

一、所需工具软件

1. Python

2. Qt, OpenCV

二、使用步骤

1.引入库

import cv2
import cv2 as cv
import numpy as np
from PyQt5 import QtWidgets

from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

2. 代码实现

代码如下:

class myWin(QtWidgets.QWidget, Ui_Dialog):

    def __init__(self):
        super(myWin, self).__init__()
        self.setupUi(self)

    def openFileButton(self):
        imgName, imgType  = QFileDialog.getOpenFileName(self,"打开文件","./","files(*.*)")
        img = cv2.imread(imgName)
        cv2.imwrite("temp/original.jpg", img)
        height, width, pixels = img.shape
        print("width,height",width,height)
        print("self.label.width()",self.label.width())
        print("self.label.height()",self.label.height())

        if width>(self.label.width()):
            rheight=(self.label.width()*height)*width
            rwidth=self.label.width()
            print("rwidth-if,rheight-if", width, rheight)
        elif height>(self.label.height()):
            rwidth=(self.label.height()*width)/height
            rheight=self.label.height()
            print("rwidth-elif,rheight-elfi", rwidth, rheight)
        elif ((self.label.height())-height)<((self.label.width())-width):
            rwidth=(self.label.height()*width)/height
            rheight=self.label.height()
            print("rwidth-elif,rheight-elfi", rwidth, rheight)
        else:
            print("rheight,rwidth", height, width)
            rheight = height
            rwidth = width

        frame = cv2.resize(img, (int(rwidth), int(rheight)))
        print("rwidth-elif,rheight-elfi", rwidth, rheight)
        img2 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # opencv读取的bgr格式图片转换成rgb格式
        _image = QtGui.QImage(img2[:], img2.shape[1], img2.shape[0], img2.shape[1] * 3, QtGui.QImage.Format_RGB888)
        jpg_out = QtGui.QPixmap(_image).scaled(rwidth, rheight) #设置图片大小
        self.label.setPixmap(jpg_out) #设置图片显示


    def saveFileButton(self):
        img = cv2.imread("temp/original.jpg")
        file_path = QFileDialog.getSaveFileName(self, "save file", "./save/test","jpg files (*.jpg);;all files(*.*)")
        print(file_path[0])
        cv2.imwrite(file_path[0], img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()



    def fingerContrast(self):
        # 均值哈希算法
        def aHash(img):
            # 缩放为8*8
            img = cv2.resize(img, (8, 8), interpolation=cv2.INTER_CUBIC)
            # 转换为灰度图
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            # s为像素和初值为0,hash_str为hash值初值为''
            s = 0
            hash_str = ''
            # 遍历累加求像素和
            for i in range(8):
                for j in range(8):
                    s = s + gray[i, j]

            # 灰度大于平均值为1相反为0生成图片的hash值
            for i in range(8):
                for j in range(8):
                    if gray[i, j] > avg:
                        hash_str = hash_str + '1'
                    else:
                        hash_str = hash_str + '0'
            return hash_str

        # 差值感知算法
        def dHash(img):
            # 缩放8*8
            img = cv2.resize(img, (9, 8), interpolation=cv2.INTER_CUBIC)
            # 转换灰度图
            gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
            hash_str = ''
            # 每行前一个像素大于后一个像素为1,相反为0,生成哈希
            for i in range(8):
                for j in range(8):
                    if gray[i, j] > gray[i, j + 1]:
                        hash_str = hash_str + '1'
                    else:
                        hash_str = hash_str + '0'
            return hash_str

        # Hash值对比
        def cmpHash(hash1, hash2):
            n = 0
            # hash长度不同则返回-1代表传参出错
            if len(hash1) != len(hash2):
                return -1
            # 遍历判断
            for i in range(len(hash1)):
                # 不相等则n计数+1,n最终为相似度
                if hash1[i] != hash2[i]:
                    n = n + 1
            return n

        import os
        path = "palmDataBase/"
        file_list = os.listdir(path)
        for file in file_list:
            img1 = cv2.imread('temp/original.jpg')
            BasePath="palmDataBase/" + str(file)
            print("BasePath: ", BasePath)
            img2 = cv2.imread(BasePath)
            print("img2: ",img2)
            print(hash2)
            n = cmpHash(hash1, hash2)
            print('均值哈希算法相似度:' + str(n))


            print('差值哈希算法相似度:' + str(n))
            result='相似度:' + str(100-n)+", 通过"
            if n < 5:
                print("file:",file)
                self.textEdit.setPlainText(result)
                self.textEdit_2.setPlainText("匹配成功名称:"+file)
                print("n: ",n)

                if width > (self.label.width()):
                    rheight = (self.label.width() * height) * width
                    rwidth = self.label.width()
                    print("rwidth-if,rheight-if", width, rheight)
                elif height > (self.label.height()):
                    rwidth = (self.label.height() * width) / height
                    rheight = self.label.height()
                    print("rwidth-elif,rheight-elfi", rwidth, rheight)
                elif ((self.label.height()) - height) < ((self.label.width()) - width):
                    rwidth = (self.label.height() * width) / height
                    rheight = self.label.height()
                    print("rwidth-elif,rheight-elfi", rwidth, rheight)
                else:
                    print("rheight,rwidth", height, width)
                    rheight = height
                    rwidth = width

                frame = cv2.resize(img2, (int(rwidth), int(rheight)))
                print("rwidth-elif,rheight-elfi", rwidth, rheight)
                img2 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # opencv读取的bgr格式图片转换成rgb格式
                _image = QtGui.QImage(img2[:], img2.shape[1], img2.shape[0], img2.shape[1] * 3,
                                      QtGui.QImage.Format_RGB888)
                jpg_out = QtGui.QPixmap(_image).scaled(rwidth, rheight)  # 设置图片大小
                self.label_2.setPixmap(jpg_out)  # 设置图片显示
                break
            else:
                print("n: ", n)
                self.textEdit.setPlainText("相似度太低,不通过")
                self.textEdit_2.setPlainText(" ")
                self.label_2.setPixmap(QPixmap(""))


if __name__=="__main__":

    app=QtWidgets.QApplication(sys.argv)
    Widget=myWin()
    Widget.showMaximized();
    Widget.show()
    sys.exit(app.exec_())

3. 运行结果

 

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作

博主推荐文章:python人脸识别统计人数qt窗体-CSDN博客

博主推荐文章:Python Yolov5火焰烟雾识别源码分享-CSDN博客

                         Python OpenCV识别行人入口进出人数统计_python识别人数-CSDN博客

个人博客主页:alicema1111的博客_CSDN博客-Python,C++,网页领域博主

博主所有文章点这里:alicema1111的博客_CSDN博客-Python,C++,网页领域博主

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷塘月色2

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值