当前位置:   article > 正文

【OpenCV+Qt】使用车牌识别系统EasyPR识别车牌号_qt opencv车牌识别

qt opencv车牌识别

EasyPR是一个中文的开源车牌识别系统,其车牌识别划分为了两个过程:即车牌检测(Plate Detection)和字符识别(Chars Recognition)两个过程:

车牌检测(Plate Detection):对一个包含车牌的图像进行分析,最终截取出只包含车牌的一个图块;

字符识别(Chars Recognition):从上一个车牌检测步骤中获取到的车牌图像,进行光学字符识别(OCR)这个过程

效果:

 如果还没有搭环境,可参考

Ubuntu+Qt下配置车牌识别系统EasyPR1.6环境_logani的博客-CSDN博客

1.在线程中循环捕获视频帧,发送到窗口进行显示

2.CPlateRecognize进行初始化

 

识别车牌和颜色,最多可同时识别4个

3.从帧图片中获取车牌信息CPlate存入容器中

如果为0,就是获取到

4.获取容器第一个车牌转成Mat进行显示

第一次转换是将二值化、灰度化后的单通道转成三通道,
第二次转换才是将Mat的BGR转换成RGB

5.获取车牌的文字信息,转换成QString到linneEdit进行显示

 源码

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent) :
  4. QWidget(parent),
  5. ui(new Ui::Widget)
  6. {
  7. ui->setupUi(this);
  8. pvideothread=new videothread("carinput.mp4");
  9. connect(pvideothread,SIGNAL(sendFrame(Mat)),this,SLOT(receiveFrame(Mat)),Qt::BlockingQueuedConnection);//接收每一帧Mat
  10. //初始化
  11. pr.setDetectType(PR_DETECT_CMSER|PR_DETECT_COLOR);//识别车牌和颜色
  12. pr.setMaxPlates(4);
  13. pr.setResultShow(false);
  14. }
  15. Widget::~Widget()
  16. {
  17. delete ui;
  18. }
  19. void Widget::receiveFrame(Mat frame)
  20. {
  21. this->frame=frame.clone();//克隆一个做显示和检测车牌
  22. cvtColor(this->frame, this->frame, CV_BGR2RGB);
  23. this->img1 = QImage(this->frame.data,this->frame.cols,this->frame.rows,QImage::Format_RGB888);
  24. this->img1 = this->img1.scaled(ui->label_2->width(),ui->label_2->height());
  25. update();
  26. }
  27. void Widget::on_pushButton_clicked()//播放
  28. {
  29. pvideothread->start();
  30. }
  31. void Widget::on_pushButton_2_clicked()
  32. {
  33. Mat carNum;
  34. int res=pr.plateRecognize(this->frame,plateVec);
  35. if(res==0)
  36. {
  37. plate=plateVec.at(0);//获取CPlate
  38. plateMat=plate.getPlateMat();//转换成Mat
  39. //第一次转换是将二值化、灰度化后的单通道转成三通道
  40. cvtColor(plateMat, carNum, CV_BGR2RGB);
  41. //第二次转换才是将Mat的BGR转换成RGB
  42. cvtColor(carNum, carNum, CV_BGR2RGB);
  43. QImage img(carNum.data,carNum.cols,carNum.rows,QImage::Format_RGB888);
  44. ui->label->setPixmap(QPixmap::fromImage(img));
  45. ui->label->setScaledContents(true);//铺满控件
  46. String str=plateVec[0].getPlateStr();
  47. ui->lineEdit->clear();
  48. ui->lineEdit->setText(QString(str.c_str()));
  49. }
  50. plateVec.clear();//清空容器
  51. }
  52. void Widget::paintEvent(QPaintEvent *e)
  53. {
  54. ui->label_2->setPixmap(QPixmap::fromImage(this->img1));
  55. }

 头文件

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <easypr.h>
  5. #include "videothread.h"
  6. using namespace easypr;
  7. namespace Ui {
  8. class Widget;
  9. }
  10. class Widget : public QWidget
  11. {
  12. Q_OBJECT
  13. public:
  14. explicit Widget(QWidget *parent = nullptr);
  15. ~Widget();
  16. void paintEvent(QPaintEvent *e);
  17. public slots:
  18. void receiveFrame(Mat frame);
  19. private slots:
  20. void on_pushButton_clicked();
  21. void on_pushButton_2_clicked();
  22. private:
  23. Ui::Widget *ui;
  24. Mat frame;
  25. CPlateRecognize pr;
  26. vector<CPlate> plateVec;
  27. CPlate plate;
  28. Mat plateMat;
  29. videothread *pvideothread;
  30. QImage img1;
  31. };
  32. #endif // WIDGET_H

 

 

感谢观看!!!!

以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/372990
推荐阅读
相关标签
  

闽ICP备14008679号