Qt车牌识别

该博客介绍了使用Qt结合车牌数字识别技术,精确识别蓝、黄、绿三种颜色车牌的方法,通过后期处理截取车牌区域来完成颜色分类。
摘要由CSDN通过智能技术生成

蓝牌,黄牌,绿牌都能准确识别,颜色识别的方法采用车牌数字识别后,再去截取车牌区域的颜色进行分类识别
请添加图片描述
请添加图片描述
请添加图片描述
具体调用代码如下:

#pragma execution_character_set("utf-8")
#include "mainwindow.h"
#include "qdebug.h"
#include "qpushbutton.h"
#include "QFileDialog"
#include <QLoggingCategory>
#include "qlayout.h"
#include "qlabel.h"
#include "qfile.h"
void drawRect(cv::Mat image,cv::Rect rect)
{
    cv::Point p1(rect.x,rect.y);
    cv::Point p2(rect.x+rect.width,rect.y+rect.height);
    cv::rectangle(image,p1,p2,cv::Scalar(0,255,0),1);
}
void getMaxClass(cv::Mat &probBlob, int *classId, double *classProb)
{
    //    cv::Mat probMat = probBlob.matRefConst().reshape(1, 1); //reshape the blob to 1x1000 matrix
    cv::Point classNumber;

    cv::minMaxLoc(probBlob, NULL, classProb, NULL, &classNumber);

    *classId = classNumber.x;
}
/*
    -----------Levenshtein距离(度量车牌识别效果)------------
    编辑距离Edit Distance,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数;
    Levenshtein距离算法可见:https://blog.csdn.net/qq844352155/article/details/38686549;
    @s1 : 字符串1;
    @s2 : 字符串2;
*/
template<class T>
static unsigned int levenshtein_distance(const T &s1, const T &s2){
    //获取s1、s2的字符长;
    const size_t len1 = s1.size(), len2 = s2.size();
    //声明col和prevCol辅助计算;
    //col记录的是最新的计数情况;
    //prevCol记录的是上一轮的计数情况;
    std::vector<unsigned int> col(len2 + 1), prevCol(len2 + 1);
    //迭代给prevCol赋值;
    for (unsigned int i = 0; i < prevCol.size(); i++) prevCol[i] = i;
    //迭代比较;扫描两字符串(n*m级的);
    for (unsigned int i = 0; i < len1; i++) {
        col[0] = i + 1;
        //迭代遍历s2[j] in s2;
        for (unsigned int j = 0; j < len2; j++)
            //比较是否不一样,交换代价最小方式优先;
            col[j + 1] = min(
                        min(prevCol[1 + j] + 1, col[j] + 1),
                    prevCol[j] + (s1[i] == s2[j] ? 0 : 1));
        //col与prevCol交换其内容(swap函数:prevCol的类型要与该vector一样,大小可以不同.);
        col.swap(prevCol);
    }
    //返回结果;
    return prevCol[len2];
}

QImage MatToQImage(const Mat& mat)
{
    // 8-bits unsigned, NO. OF CHANNELS = 1
    if(mat.type() == CV_8UC1)
    {
        QImage image(mat.cols, mat.rows, QImage::Format_Indexed8);
        // Set the color table (used to translate colour indexes to qRgb values)
        image.setColorCount(256);
        for(int i = 0; i < 256; i++)
        {
            image.setColor(i, qRgb(i, i, i));
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vqt5_qt6

你的鼓励是我们创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值