qt在window实现二维码识别

最近在研究二维码识别,看了很多博客,学到了许多,这里就不一一发出链接了CSDN中一搜一堆,我第一次用手机发博,不太会用,就简单发个近两天研究总结,虽然两天就搞出来了,但是感觉水分很大。直接上代码和视频效果吧

咦~不能上传视频,那就发个截图吧。
咦,文件也无法上传,回弄了之后再补链接。第一次发分享贴就要免费开源,大家一起学习哈。

 

-------------------分嗝符--------------------嗝~----------------------

充满元气的一天,可以在电脑继续编辑博客了

 首先挑几个重点的说一哈把,在pro里要包含红框部分的内容,一个是摄像头的,一个是二维码识别的

qt在window实现二维码识别_第1张图片

其次呢~ 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("未识别到条形码图片!");
       }

}

然后程序就完毕了,效果如下

qt在window实现二维码识别_第2张图片

啥也么有,放个手机qq码把,鸡贼的小伙伴可以趁机加扣扣一起讨论噢

qt在window实现二维码识别_第3张图片

在放个对比图吧,一个是在某位大博主那里下载的二维码扫面器,一个是自己这个简易软件识别的,结果一模一样哦

qt在window实现二维码识别_第4张图片

目前发现我这个缺点就是不能 识别出条形码的编码格式,只能之别二维码,而大博的二维码扫描器却可以都识别,同样都是QZXing,难道这就是新手与大鸟的差距,不行不行,找时间给补上,然后在更新出来吧。

附上我的工程文件,大博的二维码扫描器就不发了,毕竟人家44币呢

文件下载链接  htts://download.csdn.net/download/qq_37603131/11105906

你可能感兴趣的:(#,qt数据处理/算法类,qt,二维码,ZXing,摄像头)