当前位置: 首页 > news >正文

Qt 数据库,人脸识别

数据库 

 

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QMainWindow>
#include<QSqlDatabase>
QT_BEGIN_NAMESPACE
namespace Ui { class widget; }
QT_END_NAMESPACEclass widget : public QMainWindow
{Q_OBJECTpublic:widget(QWidget *parent = nullptr);~widget();private slots:void on_addbtn_clicked();void on_showedit_clicked();void on_deledit_clicked();void on_sortbtn_clicked();private:Ui::widget *ui;QSqlDatabase db;
};
#endif // WIDGET_H

源文件 

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QSqlRecord>widget::widget(QWidget *parent): QMainWindow(parent), ui(new Ui::widget)
{ui->setupUi(this);// 检查是否已经存在名为 "stu.db" 的数据库连接if (!db.contains("stu.db")) {// 通过 QSQLITE 驱动创建或连接数据库db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("stu.db");}// 尝试打开数据库,若打开失败则显示提示信息并返回if (!db.open()) {QMessageBox::information(this, "提示", "数据库打开失败: " + db.lastError().text());return;}// 创建数据表的 SQL 语句QSqlQuery query;QString sql = "CREATE TABLE IF NOT EXISTS stu (num INT PRIMARY KEY, name CHAR(50), sex CHAR(1), score DOUBLE)";// 执行创建表的 SQL 语句,若执行失败则显示错误信息并返回if (!query.exec(sql)) {QMessageBox::information(this, "提示", "数据表创建失败: " + query.lastError().text());return;}
}widget::~widget()
{delete ui;
}void widget::on_addbtn_clicked()
{// 从界面获取用户输入的数据int num = ui->numedit->text().toUInt();QString ui_name = ui->nameedit->text();QString ui_sex = ui->genderedit->text();double ui_score = ui->scoreedit->text().toDouble();  // 将文本转换为 double 类型// 检查输入数据是否完整,若不完整则提示用户并返回if (num == 0 || ui_name.isEmpty() || ui_sex.isEmpty() || ui_score == 0) {QMessageBox::information(this, "提示", "数据不完整");return;}// 生成插入数据的 SQL 语句QString sql = QString("INSERT INTO stu (num, name, sex, score) ""VALUES (%1, '%2', '%3', %4);").arg(num).arg(ui_name).arg(ui_sex).arg(ui_score);QSqlQuery query;// 执行插入数据的 SQL 语句,若执行失败则显示错误信息,否则提示数据插入成功if (!query.exec(sql)) {QMessageBox::information(this, "提示", "插入数据失败: " + query.lastError().text());} else {QMessageBox::information(this, "提示", "数据插入成功");}
}void widget::on_showedit_clicked()
{// 查询数据库中的所有数据QSqlQuery query("SELECT num, name, sex, score FROM stu");// 检查查询是否成功执行,若失败则显示提示信息并返回if (!query.exec()) {QMessageBox::information(this, "提示", "查询数据失败");return;}// 清空表格中的所有行ui->tableWidget->setRowCount(0);// 遍历查询结果并将每行数据插入到表格中int row = 0;while (query.next()){QSqlRecord record = query.record(); // 获取当前行的记录ui->tableWidget->insertRow(row); // 在表格中插入新行for (int j = 0; j < record.count(); j++){// 将查询到的数据填入表格ui->tableWidget->setItem(row, j, new QTableWidgetItem(query.value(j).toString()));}row++; // 更新行索引}
}void widget::on_deledit_clicked()
{// 获取当前选中的行号int row = ui->tableWidget->currentRow();if (row != -1) {// 如果选中了行,则删除该行ui->tableWidget->removeRow(row);QMessageBox::information(this, "提示", "行已经删除");} else {// 如果没有选中行,则提示用户QMessageBox::warning(this, "警告", "没选中行");}
}void widget::on_sortbtn_clicked()
{// 查询数据库中的所有数据并按 num 降序排列QSqlQuery query("SELECT num, name, sex, score FROM stu ORDER BY num DESC");// 检查查询是否成功执行,若失败则显示提示信息并返回if (!query.exec()) {QMessageBox::information(this, "提示", "查询数据失败");return;}// 清空表格中的所有行ui->tableWidget->setRowCount(0);// 遍历查询结果并将每行数据插入到表格中int row = 0;while (query.next()){QSqlRecord record = query.record(); // 获取当前行的记录ui->tableWidget->insertRow(row); // 在表格中插入新行for (int j = 0; j < record.count(); j++){// 将查询到的数据填入表格ui->tableWidget->setItem(row, j, new QTableWidgetItem(query.value(j).toString()));}row++; // 更新行索引}
}

 

人脸识别 

头文件

#include<opencv2/face.hpp>
#include <vector>
#include <map>
#include <QMessageBox>
#include <QDebug>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QTimerEvent>
#include<QtSerialPort/QtSerialPort>
#include<QtSerialPort/QSerialPortInfo>
using namespace  cv;
using namespace cv::face;
using namespace std;
#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

源文件

#include "mainwindow.h"
#include "ui_mainwindow.h"// 构造函数,初始化 MainWindow 并设置 UI
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this); // 设置 UI// 创建 VideoCapture 对象,用于打开和读取视频VideoCapture video;// 打开视频文件 "01.mp4"video.open("D:\\opencv\\resource\\01.mp4");// 如果视频无法打开,弹出提示信息if(!video.open("D:\\opencv\\resource\\01.mp4")){QMessageBox::information(this,"提示","视频打开失败");return;}// 定义 Mat 对象,用于存储视频帧、灰度图像和直方图均衡化后的图像Mat src;   // 原始帧Mat gray;  // 灰度图像Mat dest;  // 直方图均衡化后的图像// 定义人脸检测的级联分类器对象CascadeClassifier c;// 定义矩形向量用于存储检测到的面部区域vector<Rect> faces;// 加载 Haar 级联分类器文件,用于人脸检测if(!c.load("D:\\opencv\\resource\\haarcascade_frontalface_alt.xml")){QMessageBox::information(this,"提示","加载失败");return;}// 开始读取视频帧while(video.read(src)){// 水平翻转视频帧(镜像效果)cv::flip(src, src, 1);// 将原始视频帧转换为灰度图像cv::cvtColor(src, gray, CV_BGR2GRAY);// 对灰度图像进行直方图均衡化,增强图像对比度cv::equalizeHist(gray, dest);// 检测人脸区域c.detectMultiScale(dest, faces);// 在每个检测到的人脸区域绘制红色矩形框for(uint i=0; i<faces.size(); i++){cv::rectangle(src, faces[i], Scalar(0, 0, 255), 2);}// 显示标记了人脸的原始视频帧imshow("src", src);// 如果需要,可以打开以下代码,显示灰度图和均衡化后的图像// imshow("Gray", gray); // 显示灰度图// imshow("Equalized", dest); // 显示直方图均衡化后的图像// 按下 "ESC" 键退出if(waitKey(30) == 27){break;}}
}// 析构函数,释放 UI 资源
MainWindow::~MainWindow()
{delete ui;
}


http://www.mrgr.cn/news/48137.html

相关文章:

  • 【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹
  • Spring(七)Spring Cloud----Feign、Zuul和Apollo
  • LeetCode80.删除有序数组的重复项
  • 用人话讲计算机:Python篇!(十五)迭代器、生成器、装饰器
  • Golang 的并发优势
  • 移动互联网时代优秀的产品设计方案/运行推广方案
  • Matplotlib库
  • 6个设计师都在用的样机素材网站
  • 400行程序写一个实时操作系统RTOS(开篇)
  • Flutter技术学习
  • 大数据新视界 --大数据大厂之 ClickHouse:大数据分析领域的璀璨明星
  • ☕️从小工到专家的 Java 进阶之旅:全新的HttpClient,现代高效的网络通信利器
  • 每日OJ题_牛客_小乐乐改数字_模拟_C++_Java
  • 算法的收敛速度计算过程
  • 『网络游戏』进入游戏主城UI跳转主城【26】
  • Linux下的Makefile基本操作
  • Redis 的安装与部署(图文)
  • 中间件:SpringBoot集成Redis
  • FLBOOK一款强大的电子产品图册制作工具
  • springboot健康管理平台-计算机毕业设计源码38430
  • 【unity框架开发9】序列化字典,场景,vector,color,Quaternion
  • 孤独相伴 - 结婚十七年
  • 从数据到洞察:ChatGPT如何革新Python数据分析流程
  • 跟着深度学习好书实践tensorflow神经网络
  • NRF24L01原子HAl库学习
  • cuda实现gemm