最近在研究二维码识别,看了很多博客,学到了许多,这里就不一一发出链接了CSDN中一搜一堆,我第一次用手机发博,不太会用,就简单发个近两天研究总结,虽然两天就搞出来了,但是感觉水分很大。直接上代码和视频效果吧
咦~不能上传视频,那就发个截图吧。
咦,文件也无法上传,回弄了之后再补链接。第一次发分享贴就要免费开源,大家一起学习哈。
-------------------分嗝符--------------------嗝~----------------------
充满元气的一天,可以在电脑继续编辑博客了
首先挑几个重点的说一哈把,在pro里要包含红框部分的内容,一个是摄像头的,一个是二维码识别的
其次呢~ camera.h
#ifndef CAMERA_H
#define CAMERA_H
#include
#include "mainwindow.h"
#include
#include
#include
#include
#include
namespace Ui {
class camera;
}
class camera : public QWidget
{
Q_OBJECT
public:
explicit camera(QWidget *parent = 0);
~camera();
private slots:
void on_pushButton_clicked();
void timeSlot();
void displayImage(int id, QImage image);
void on_pushButton_2_clicked();
private:
Ui::camera *ui;
QCameraImageCapture *QCameraImg;
QCamera *my_cam;
};
#endif // CAMERA_H
在主次呢~camera.cpp
#include "camera.h"
#include "ui_camera.h"
#include
QTimer *timer2;
camera::camera(QWidget *parent) :
QWidget(parent),
ui(new Ui::camera)
{
ui->setupUi(this);
timer2 = new QTimer(this);
connect(timer2, SIGNAL(timeout()), this, SLOT(timeSlot()));//连接时间刷新函数
timer2->start(10);
/*QString m_fileName="D:/QT/secretJL/software/SmartMemory/1111.png";
QImage img; //加载图像
if(!(img.load(m_fileName)))
{
QMessageBox::information(this,
tr("打开图像失败"),
tr("打开图像失败!"));
return;
}
img = img.scaled(ui->label_image->width(),ui->label_image->height(),Qt::KeepAspectRatio);
ui->label_image ->setPixmap(QPixmap::fromImage(img));
*/
my_cam = new QCamera(this);//添加显示界面
my_cam->setCaptureMode(QCamera::CaptureVideo);//设置摄像头捕获模式
//my_cam->setViewfinder(ui->widget);//设置取景器
my_cam->start();//启动摄像头
QCameraImg = new QCameraImageCapture(my_cam);//截取图像
QObject::connect(QCameraImg, &QCameraImageCapture::imageCaptured, this, &camera::displayImage);//触发的信号为
}
void camera::displayImage(int id, QImage image)
{
image = image.scaled(ui->label_image->width(),ui->label_image->height(),Qt::KeepAspectRatio);
ui->label_image->setPixmap(QPixmap::fromImage(image));//将捕获的图片映射到label中
QDateTime qtimeObj = QDateTime::currentDateTime();
QZXing decode;
QString str = decode.decodeImage(image);
if(str.isEmpty()==false){
ui->lineEdit->setText(str);
timer2->stop();
//my_cam->stop();
}
else
ui->lineEdit->setText(tr("未识别到条形码图片!%1").arg(qtimeObj.toString("yyyyMMddhhmmsszzz")));
}
void camera::on_pushButton_2_clicked()
{
/*拍照按钮槽*/
my_cam->start();//启动摄像头
timer2->start(10);
QCameraImg->capture();//拍照获取一帧
}
/*保存照片*/
/*
void camera::on_pushButton_3_clicked()
{
QCameraImg->capture();//拍照获取一帧
const QPixmap *pixmap = ui->label_image->pixmap();
if(pixmap)
pixmap->save("D:\\img.png");
else
qDebug()<<"qwe";
}
*/
camera::~camera()
{
delete ui;
}
//时间显示回调函数
void camera::timeSlot()
{
QCameraImg->capture();//拍照获取一帧
}
void camera::on_pushButton_clicked()
{
QString m_fileName;
m_fileName = QFileDialog::getOpenFileName(this,
tr("条形码打开文件"),
"./",
tr("任何文件(*.*)"
";;文本文件(*.png)")
);
qDebug()<statusBar->setToolTip(m_fileName);
QImage img; //加载图像
if(!(img.load(m_fileName)))
{
QMessageBox::information(this,
tr("打开图像失败"),
tr("打开图像失败!"));
return;
}
img = img.scaled(ui->label_image->width(),ui->label_image->height(),Qt::KeepAspectRatio);
ui->label_image ->setPixmap(QPixmap::fromImage(img));
QZXing decode;
QString str = decode.decodeImage(img);
if(str.isEmpty()==false)
ui->lineEdit->setText(str);
else
ui->lineEdit->setText("未识别到条形码图片!");
}
}
然后程序就完毕了,效果如下
啥也么有,放个手机qq码把,鸡贼的小伙伴可以趁机加扣扣一起讨论噢
在放个对比图吧,一个是在某位大博主那里下载的二维码扫面器,一个是自己这个简易软件识别的,结果一模一样哦
目前发现我这个缺点就是不能 识别出条形码的编码格式,只能之别二维码,而大博的二维码扫描器却可以都识别,同样都是QZXing,难道这就是新手与大鸟的差距,不行不行,找时间给补上,然后在更新出来吧。
附上我的工程文件,大博的二维码扫描器就不发了,毕竟人家44币呢
文件下载链接 htts://download.csdn.net/download/qq_37603131/11105906