Opencv+ qt5.1 完美配置

本文介绍了如何在Windows上配置OpenCV2.4.3和Qt5.1.0的集成环境,包括添加Qt的bin路径到系统PATH,使用Dependency Walker检查缺失DLL,以及解决调试器配置问题。通过配置,成功运行并展示了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于最近在看一本书《OpenCV2计算机视觉编程手册》,所以索性就配置了qt,其实之前我也配置过opencv,不过那是用mingw编译器来完成的。今天我使用cdb来做编译器调试。

其实刚刚配置的时候我选择了2.4.6,但是配置后,发现依然不能读取图片(期间问了LT大牛,人很好),自己很挫的,但是之后我选择了我下载了2.4.3。说句实话, 我觉得这本书仅仅是翻译了,但是好多东西还是用的2.2的,着实不好的啦

工具:

1)opencv2.4.3

2) qt-windows-opensource-5.1.0-msvc2010-x86-offline

 

然后我将 C:\Qt\Qt5.1.0\5.1.0\msvc2010\bin 写入到path中(很有必要)

不然很多的dll缺失,无法运行,但是可以用 

要在 Qt 上实现人脸识别打卡的功能,可以使用 OpenCV 库来进行人脸检测、特征提取和匹配等操作。以下是一个简单的流程: 1. 采集人脸照片:使用摄像头或者从文件中读取照片,获取人脸照片。 2. 人脸检测和特征提取:使用 OpenCV 的人脸检测和特征提取算法,对人脸照片进行处理,提取出人脸的特征向量。 3. 特征匹配:将当前人脸的特征向量与之前采集的人脸特征向量进行比对,判断是否匹配。 4. 打卡记录:根据匹配结果,记录打卡时间和结果,可以将记录保存到数据库中。 下面是一个简单的示例代码,演示如何使用 OpenCV 进行人脸识别: ```cpp // 匹配阈值 const double threshold = 0.7; // 人脸检测器 cv::CascadeClassifier face_cascade; face_cascade.load("haarcascade_frontalface_alt.xml"); // 特征提取器 cv::Ptr<cv::face::LBPHFaceRecognizer> recognizer = cv::face::LBPHFaceRecognizer::create(); // 数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("test"); db.setUserName("root"); db.setPassword("123456"); db.open(); // 初始化打卡表 QSqlQuery query(db); query.exec("CREATE TABLE IF NOT EXISTS attendance (" "id INT PRIMARY KEY AUTO_INCREMENT," "name VARCHAR(100)," "time DATETIME," "result VARCHAR(20)" ")"); // 获取当前时间 QDateTime current = QDateTime::currentDateTime(); // 采集人脸照片 cv::Mat frame = ...; // 人脸检测 std::vector<cv::Rect> faces; cv::Mat gray; cv::cvtColor(frame, gray, cv::COLOR_BGR2GRAY); face_cascade.detectMultiScale(gray, faces, 1.1, 2, 0, cv::Size(30, 30)); // 特征提取和匹配 for (const cv::Rect& face : faces) { cv::Mat face_roi = gray(face); cv::resize(face_roi, face_roi, cv::Size(100, 100)); int label = -1; double confidence = 0; recognizer->predict(face_roi, label, confidence); QString name; if (confidence < threshold) { // 匹配成功 QSqlQuery query(db); query.prepare("SELECT name FROM faces WHERE id = ?"); query.addBindValue(label); query.exec(); if (query.next()) { name = query.value(0).toString(); } QString result = "Success"; query.prepare("INSERT INTO attendance (name, time, result) VALUES (?, ?, ?)"); query.addBindValue(name); query.addBindValue(current.toString("yyyy-MM-dd hh:mm:ss")); query.addBindValue(result); query.exec(); } else { // 匹配失败 QString result = "Failed"; query.prepare("INSERT INTO attendance (name, time, result) VALUES (?, ?, ?)"); query.addBindValue(""); query.addBindValue(current.toString("yyyy-MM-dd hh:mm:ss")); query.addBindValue(result); query.exec(); } } ``` 在这个代码片段中,我们使用了 OpenCV 的人脸检测器和特征提取器来进行人脸识别,使用了 Qt 的数据库 API 来记录打卡记录。具体来说,我们首先加载了人脸检测器和特征提取器,并初始化了数据库。然后我们获取当前时间,并采集人脸照片。接着我们使用人脸检测器检测人脸,使用特征提取器提取人脸特征向量,并与之前采集的特征向量进行比对,判断匹配度是否达到阈值。如果匹配成功,我们从数据库中获取该人的姓名,并将打卡记录插入到数据库中。如果匹配失败,我们将打卡记录插入到数据库中,并将姓名设置为空字符串。 需要注意的是,这只是一个简单的示例代码,实际应用中还需要考虑更多的实现细节和安全性问题。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值