基于MATLAB的车牌识别

2023-11-16

目录

车牌识别系统的介绍与展示   

车牌定位

1.灰度处理

 2.边缘检测 

车牌分割

1.图像腐蚀

2.图像平滑

3.移除对象

4.图像切割

车牌识别

1.灰度处理

2.直方图均衡化

3.二值化

4.中值滤波

5.字符识别


车牌识别系统的介绍与展示   

        车牌识别技术的推广普及对加强道路管理、城市交通事故、违章停车、处理车辆被盗案件、保障社会稳定等方面有非常重大的影响。恰逢今年学习了《数字图像处理》课程,利用一些数字图像处理的知识并借鉴网络上诸多算法开发了一个车牌识别系统,并且借用MATLAB的APP designer平台搭建了一个车牌识别的app。(此app目前对一部分图片可以准确识别,但是其他图片效果一般,正在持续改进中......如有进展,后续会进行更新

        一个完整的车牌号识别系统要完成从图像采集到字符识别输出,过程相当复杂,基本可以分成硬件部分和软件部分,硬件部分包括系统触发、图像采集,软件部分一般包括车牌定位、车牌分割和车牌识别三个部分。本文主要介绍软件处理部分,下面是一个车牌识别后的运行结果图:

车牌定位

1.灰度处理

        由于彩色图不易确定车牌边界,将彩色图转换为灰度图以进一步处理图片。这里使用了rgb2gray函数,该函数接收一个rgb图像变量作为参数,返回该图像转换为灰度图后的图像数据,并将该数据赋值给变量I1。

        若想得到该灰度图的灰度分布情况,可使用imhist函数画出该灰度图的灰度值分布直方图。(此处不再展示)

%% 灰度处理
img1 = rgb2gray(img);    % RGB图像转灰度图像
figure;
subplot(1, 2, 1);
imshow(img1);
title('灰度图像');
subplot(1, 2, 2);
imhist(img1);
title('灰度处理后的灰度直方图');

 2.边缘检测 

        在将彩色图转换为灰度图后,便可用edge函数识别该图像的边界,edge函数通过使用一阶导数和二阶导数检测亮度的不连续来确定图像的边界,它可以使用Sobel,Prewitt,Roberts,Canny,LoG,零交叉等多种算子,这里使用Roberts算子进行边缘检测。

%% 边缘检测
img4 = edge(img1, 'roberts', 0.15, 'both');
figure('name','边缘检测');
imshow(img4);
title('roberts算子边缘检测');

车牌分割

1.图像腐蚀

        由于边缘检测后的图像中无关结构太多,这里需对图像进行腐蚀处理,实现腐蚀处理的函数为imerode,它接收一个图像数据和一个结构子,图像中背景与结构子完全重合的像素点输出值为1,不完全重合的和完全不重合的像素点输出值为0,最后返回使用该结构子腐蚀过后的图像数据,以此实现削减无关结构的目的。

%% 图像腐蚀
se=[1;1;1];
img5 = imerode(img4, se);
figure('name','图像腐蚀');
imshow(img5);
title('图像腐蚀后的图像');

2.图像平滑

        腐蚀后的图像结构大多呈分散状分布,不连贯。为了方便之后确认车牌位置,这里需对该图像进行平滑处理,在此我们使用闭操作使车牌平滑,并减小噪音,闭操作可以理解为先膨胀后腐蚀,实现函数为imclose。

%% 平滑图像
se = strel('rectangle', [30, 30]);
img6 = imclose(img5, se);
figure('name','平滑处理');
imshow(img6);
title('平滑图像的轮廓');

3.移除对象

%% 从图像中删除所有少于2200像素8邻接
img7 = bwareaopen(img6, 2200);
figure('name', '移除小对象');
imshow(img7);
title('从图像中移除小对象');

4.图像切割

        在经过上面的处理之后,最初要识别的彩色图像已经变成了以车牌为主要结构的二值图像,我们可以对这种主体结构清晰的二值图像进行扫描,进而确定出车牌的位置。
        这里确定车牌位置的思路为:
        首先使用size函数得到该图像矩阵的行数y和列数x,用zero函数建立一个y行1列的零矩阵blue_Y,然后使用嵌套循环结构遍历该二值图像的每一个像素点,把每行值为1的像素点(也就是蓝色像素点)的数量分别记录在先前创建的矩阵blue_y中。遍历完之后,找出blue_y矩阵中值最大的元素,它所对应的行即为该二值图像中蓝色像素点最多的行,该行可认为是靠近车牌中心的一行。
        然后我们以这一行为起点,分别向上向下逐行扫描,当被扫描到的蓝中白色像素点多于某个值时(该值只是一个用于判断的估计值),继续向上(或向下)扫描,直到扫描到某行中的蓝色像素点数量小于估计值时,停止扫描,并记录这一行的行数,该行数即为车牌的上边界(或下边界)。
        同理,我们可以用相同的方法确定出车牌的左边界和右边界。

        然后将原图按照上述方法确定的坐标进行裁剪,即可得到仅有车牌的图像。

%% 图像切割
[y, x, z] = size(img7);
img8 = double(img7);    % 转成双精度浮点型

% 车牌的蓝色区域
% Y方向
blue_Y = zeros(y, 1);
for i = 1:y
    for j = 1:x
        if(img8(i, j) == 1) % 判断车牌位置区域
            blue_Y(i, 1) = blue_Y(i, 1) + 1;    % 像素点统计
        end
    end
end

% 找到Y坐标的最小值
img_Y1 = 1;
while (blue_Y(img_Y1) < 5) && (img_Y1 < y)
    img_Y1 = img_Y1 + 1;
end

% 找到Y坐标的最大值
img_Y2 = y;
while (blue_Y(img_Y2) < 5) && (img_Y2 > img_Y1)
    img_Y2 = img_Y2 - 1;
end

% x方向
blue_X = zeros(1, x);
for j = 1:x
    for i = 1:y
        if(img8(i, j) == 1) % 判断车牌位置区域
            blue_X(1, j) = blue_X(1, j) + 1;
        end
    end
end

% 找到x坐标的最小值
img_X1 = 1;
while (blue_X(1, img_X1) < 5) && (img_X1 < x)
    img_X1 = img_X1 + 1;
end

% 找到x坐标的最小值
img_X2 = x;
while (blue_X(1, img_X2) < 5) && (img_X2 > img_X1)
    img_X2 = img_X2 - 1;
end

% 对图像进行裁剪
img9 = img(img_Y1:img_Y2, img_X1:img_X2, :);
figure('name', '定位剪切图像');
imshow(img9);
title('定位剪切后的彩色车牌图像')

% 保存提取出来的车牌图像
% imwrite(img9, '车牌图像.jpg');

车牌识别

1.灰度处理

% 转换成灰度图像
plate_img1 = rgb2gray(img9);    % RGB图像转灰度图像
figure;
subplot(1, 2, 1);
imshow(plate_img1);
title('灰度图像');
subplot(1, 2, 2);
imhist(plate_img1);
title('灰度处理后的灰度直方图');

2.直方图均衡化

        为了使识别更加准确,我们将上一步得到的直方图使用histeq函数进行均衡化,增强图像的对比度。

% 直方图均衡化
plate_img2 = histeq(plate_img1);
figure('name', '直方图均衡化');
subplot(1,2,1);
imshow(plate_img2);
title('直方图均衡化的图像');
subplot(1,2,2);
imhist(plate_img2);
title('直方图');

3.二值化

        为了便于将其中的字符分离,我们将它转换为二值图像

% 二值化处理
plate_img3 = im2bw(plate_img2, 0.76);
figure('name', '二值化处理');
imshow(plate_img3);
title('车牌二值图像');

4.中值滤波

        在车牌转换为二值图像后,为了使图像中干扰元素减少,我们对其进行中值滤波,以减小图中噪音。

% 中值滤波
plate_img4 = medfilt2(plate_img3);
figure('name', '中值滤波');
imshow(plate_img4);
title('中值滤波后的图像');

5.字符识别

        目前用于车牌字符识别的算法主要有基于模板匹配的算法以及基于人工神经网络(Artificial Neural Networks,ANN)的算法。基于模板匹配的字符识别的基本过程是:首先对待识别字符进行二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。用人工神经网络进行字符识别主要有两种方法:一种方法是先对待识别字符进行特征提取,然后用所获得的特征来训练神经网络分类器。识别效果与字符特征的提取有关,而字符特征提取往往比较耗时。因此,字符特征的提取就成为研究的关键。另一种方法则充分利用神经网络的特点,直接把待处理图像输入网络,由网络自动实现特征提取直至识别。

        模板匹配的主要特点是实现简单,当字符较规整时对字符图像的缺损、污迹干扰适应力强且识别率相当高。综合模板匹配的这些优点我们将其用为车牌字符识别的主要方法。

        模板匹配是图象识别方法中最具代表性的基本方法之一,它是将从待识别的图象或图象区域f(i,j)中提取的若干特征量与模板T(i,j)相应的特征量逐个进行比较,计算它们之间规格化的互相关量,其中互相关量最大的一个就表示期间相似程度最高,可将图象归于相应的类。也可以计算图象与模板特征量之间的距离,用最小距离法判定所属类。然而,通常情况下用于匹配的图象各自的成像条件存在差异,产生较大的噪声干扰,或图象经预处理和规格化处理后,使得图象的灰度或像素点的位置发生改变。在实际设计模板的时候,是根据各区域形状固有的特点,突出各类似区域之间的差别,并将容易由处理过程引起的噪声和位移等因素都考虑进去,按照一些基于图象不变特性所设计的特征量来构建模板,就可以避免上述问题。

        此处采用相减的方法来求得字符与模板中哪一个字符最相似,然后找到相似度最大的输出。汽车牌照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,或是军种、警别等有特定含义的字符简称;紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约50多个,大写英文字母26个,数字10个。所以建立字符模板库也极为方便。为了实验方便,结合本次设计所选汽车牌照的特点,只建立了7个汉字26个字母与10个数字的模板。其他模板设计的方法与此相同。

        首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字符相减,得到的0越多那么就越匹配。把每一幅相减后的图的0值个数保存,然后找数值最大的,即为识别出来的结果。

%% 字符识别
plate_img5 = my_imsplit(plate_img4);
[m, n] = size(plate_img5);

s = sum(plate_img5);    %sum(x)就是竖向相加,求每列的和,结果是行向量;
j = 1;
k1 = 1;
k2 = 1;
while j ~= n
    while s(j) == 0
        j = j + 1;
    end
    k1 = j;
    while s(j) ~= 0 && j <= n-1
        j = j + 1;
    end
    k2 = j + 1;
    if k2 - k1 > round(n / 6.5)
        [val, num] = min(sum(plate_img5(:, [k1+5:k2-5])));
        plate_img5(:, k1+num+5) = 0;
    end
end

y1 = 10;
y2 = 0.25;
flag = 0;
word1 = [];
while flag == 0
    [m, n] = size(plate_img5);
    left = 1;
    width = 0;
    while sum(plate_img5(:, width+1)) ~= 0
        width = width + 1;
    end
    if width < y1
        plate_img5(:, [1:width]) = 0;
        plate_img5 = my_imsplit(plate_img5);
    else
        temp = my_imsplit(imcrop(plate_img5, [1,1,width,m]));
        [m, n] = size(temp);
        all = sum(sum(temp));
        two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
        if two_thirds/all > y2
            flag = 1;
            word1 = temp;
        end
        plate_img5(:, [1:width]) = 0;
        plate_img5 = my_imsplit(plate_img5);
    end
end

figure;
subplot(2,4,1), imshow(plate_img5);

 % 分割出第二个字符
 [word2,plate_img5]=getword(plate_img5);
 subplot(2,4,2), imshow(plate_img5);
 % 分割出第三个字符
 [word3,plate_img5]=getword(plate_img5);
 subplot(2,4,3), imshow(plate_img5);
 % 分割出第四个字符
 [word4,plate_img5]=getword(plate_img5);
 subplot(2,4,4), imshow(plate_img5);
 % 分割出第五个字符
 [word5,plate_img5]=getword(plate_img5);
 subplot(2,3,4), imshow(plate_img5);
 % 分割出第六个字符
 [word6,plate_img5]=getword(plate_img5);
 subplot(2,3,5), imshow(plate_img5);
 % 分割出第七个字符
 [word7,plate_img5]=getword(plate_img5);
 subplot(2,3,6), imshow(plate_img5);

 figure;
 subplot(5,7,1),imshow(word1),title('1');
 subplot(5,7,2),imshow(word2),title('2');
 subplot(5,7,3),imshow(word3),title('3');
 subplot(5,7,4),imshow(word4),title('4');
 subplot(5,7,5),imshow(word5),title('5');
 subplot(5,7,6),imshow(word6),title('6');
 subplot(5,7,7),imshow(word7),title('7');

 word1=imresize(word1,[40 20]);%imresize对图像做缩放处理,常用调用格式为:B=imresize(A,ntimes,method);其中method可选nearest,bilinear(双线性),bicubic,box,lanczors2,lanczors3等
 word2=imresize(word2,[40 20]);
 word3=imresize(word3,[40 20]);
 word4=imresize(word4,[40 20]);
 word5=imresize(word5,[40 20]);
 word6=imresize(word6,[40 20]);
 word7=imresize(word7,[40 20]);

 subplot(5,7,15),imshow(word1),title('11');
 subplot(5,7,16),imshow(word2),title('22');
 subplot(5,7,17),imshow(word3),title('33');
 subplot(5,7,18),imshow(word4),title('44');
 subplot(5,7,19),imshow(word5),title('55');
 subplot(5,7,20),imshow(word6),title('66');
 subplot(5,7,21),imshow(word7),title('77');
 
 imwrite(word1,'1.jpg'); % 创建七位车牌字符图像
 imwrite(word2,'2.jpg');
 imwrite(word3,'3.jpg');
 imwrite(word4,'4.jpg');
 imwrite(word5,'5.jpg');
 imwrite(word6,'6.jpg');
 imwrite(word7,'7.jpg');
 
 %% 进行字符识别
 liccode=char(['0':'9' 'A':'Z' '京辽鲁陕苏豫浙贵']);%建立自动识别字符代码表;'京津沪渝港澳吉辽鲁豫冀鄂湘晋青皖苏赣浙闽粤琼台陕甘云川贵黑藏蒙桂新宁'
 % 编号:0-9分别为 1-10;A-Z分别为 11-36;
 % 京  津  沪  渝  港  澳  吉  辽  鲁  豫  冀  鄂  湘  晋  青  皖  苏
 % 赣  浙  闽  粤  琼  台  陕  甘  云  川  贵  黑  藏  蒙  桂  新  宁
 % 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 
 % 60 61 62 63 64 65 66 67 68 69 70
 subBw2 = zeros(40, 20);
 num = 1;   % 车牌位数
 for i = 1:7
    ii = int2str(i);    % 将整型数据转换为字符串型数据
    word = imread([ii,'.jpg']); % 读取之前分割出的字符的图片
    segBw2 = imresize(word, [40,20], 'nearest');    % 调整图片的大小
    segBw2 = im2bw(segBw2, 0.5);    % 图像二值化
    if i == 1   % 字符第一位为汉字,定位汉字所在字段
        kMin = 37;
        kMax = 44;
    elseif i == 2   % 第二位为英文字母,定位字母所在字段
        kMin = 11;
        kMax = 36;
    elseif i >= 3   % 第三位开始就是数字了,定位数字所在字段
        kMin = 1;
        kMax = 36;
    end
    
    l = 1;
    for k = kMin : kMax
        fname = strcat('字符模板\',liccode(k),'.jpg');  % 根据字符库找到图片模板
        samBw2 = imread(fname); % 读取模板库中的图片
        samBw2 = im2bw(samBw2, 0.5);    % 图像二值化
        
        % 将待识别图片与模板图片做差
        for i1 = 1:40
            for j1 = 1:20
                subBw2(i1, j1) = segBw2(i1, j1) - samBw2(i1 ,j1);
            end
        end
        
        % 统计两幅图片不同点的个数,并保存下来
        Dmax = 0;
        for i2 = 1:40
            for j2 = 1:20
                if subBw2(i2, j2) ~= 0
                    Dmax = Dmax + 1;
                end
            end
        end
        error(l) = Dmax;
        l = l + 1;
    end
    
    % 找到图片差别最少的图像
    errorMin = min(error);
    findc = find(error == errorMin);
%     error
%     findc
       
    % 根据字库,对应到识别的字符
    Code(num*2 - 1) = liccode(findc(1) + kMin - 1);
    Code(num*2) = ' ';
    num = num + 1;
    
    
 end
 
 % 显示识别结果
 disp(Code);
 msgbox(Code,'识别出的车牌号');

        我这里有之前做好的代码(有可视化app)以及配套的项目报告和答辩PPT,需要的请私信我

写在最后:

        此系统参考CSDN及网络上诸多算法,我将其进行整合修改和调试,目前运行非常顺畅,对一些图片识别效果很好,但是其他图片效果一般,正在持续改进中......若有不当之处,希望大家多多指正!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于MATLAB的车牌识别 的相关文章

  • 通过 h5py 将 matlab v7.3 文件读入 python numpy 数组列表

    我知道以前已经有人问过这个问题 但在我看来 仍然没有答案可以解释正在发生的事情 并且不适用于我的情况 我有一个 matlab v7 3 文件 其结构如下 gt rank lt 1x454 cell gt gt each element is
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • 一次分配多个字段的聪明方法?

    由于遗留函数调用 我有时被迫编写像这样的丑陋的包装器 function return someWrapper someField a someField a b someField b and so on realistically it
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 按元素出现的频率对数组元素进行排序

    是否可以在 matlab octave 中使用sort函数根据元素的相对频率对数组进行排序 例如数组 m 4 4 4 10 10 10 4 4 5 应该产生这个数组 5 10 10 10 4 4 4 4 4 5是出现频率较低的元素 位于顶部
  • 如何在 Matlab 中使用谷歌翻译?

    我正在编写一个程序 使用 Matlab 列出电影字幕文件中的所有唯一单词 现在我有一个独特的单词列表 我想将其翻译成我的语言并在观看电影之前了解其含义 有谁知道如何在 Matlab 中使用 Google Translate 以便完成我的脚本
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • 句柄类和值类的区别

    我有一些 C 背景 想使用 Matlab 中的类 句柄和值类有什么区别 我知道如果我想定义一个带有重载运算符 例如 和 的矩阵类 我会使用值类 然而 有时 当我选择一个手柄类时 事情似乎只对我有用 MathWorks 提供了一些有关其用途的
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 在 Matlab 中将 datenum 转换为 datetime 的最快方法

    我在 Matlab 中将 datenum 转换为 datetime 时遇到问题 Given dnum floor now floor now 1 我尝试了以下方法 datenum dnum 但这没有用 我发现有效的方法是 datetime
  • 我需要转义该 MATLAB 字符串中的字符吗?

    我想在 MATLAB 中调用以下 bash 命令 grep Up to test linux vision1 1 log awk print 7 I use system 在MATLAB中 但结果有错误 gt gt status strin
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列

随机推荐

  • MCCMNC列表

    http blog chinaunix net uid 20484604 id 1941290 html https clients txtnation com hc en us articles 218719768 MCCMNC mobi
  • ODrive踩坑(五)ODrive驱动云台电机、低齿槽转矩电机实现高精度定位

    前几篇介绍了ODrive在Windows下的使用环境搭建 驱动3508 5008无刷电机 TLE5012B AS5047P的ABI编码器配置 AS5047P SPI绝对值编码器配置 ODrive踩坑 一 windows下使用环境的搭建 od
  • DOPI EV200开发板开箱组装

    随着网友们 连续收到开发板 我再次开贴 分享下如何组装 插上配件 主板接口再次复习下 各位成员 再次认识下 主板链接FPC软排线的方向 Sensor链接 FPC软排线的方向 其他配件链接 这里特别强调下 WiFi请插到SDIO1上 如果插到
  • python实现分页

    使用python实现分页功能 当我们有大量数据需要展示时 需要对数据进行分页展示 这时就用到了分页功能 分页使得数据更好的展示给用户 当访问页码数大于总页码数的时候 展示第一页内容 import math content name aa a
  • 基于STM8的ADC0832采集及蓝牙通信系统

    为了方便大家学习 工程已经打包上传 http download csdn net detail devintt 8029389 最近在淘宝逛的时候发现了一款单片机 STM8 相比之前一直使用的也是8位的AVR相比 感觉STM8更为强大 芯片
  • 【计算机网络】

    1 1 1 发出一条邮件 其OSI七层模型的传输过程 参考1 参考2
  • Python学习笔记 数据类型

    要学习一门语言 首先要看看它的数据类型 由于Python是一门动态语言 所以Python的变量在声明时不需要类型 只要写出名称即可 这里所用的Python版本是目前最新的Python 3 6 1 数字类型 整数 在Python中只有一种整数
  • 机器学习集成模型ML ens学习——多层模型集成(一)

    集成模型就是把多个模型融合在一起使用 通过构建一层层的模型体系 最终得到不同模型的预测结果 首先安装 pip install mlens 案例 import pandas as pd from sklearn model selection
  • vue中逗号的使用方法_Vuex 的使用方法

    Vuex 的使用 安装 npm i vuex save 然后创建一个store import Vue from vue import Vuex from vuex Vue use Vuex export default new Vuex S
  • java 反射泛型工具类, 获取类的泛型类型

    直接上代码 public class ParameterizedTypeUtils 根据索引获取泛型实例类 param type 类型 param index return java lang Class
  • aixos ajax,使用axios如何实现ajax请求(详细教程)

    之前给大家介绍了jQuery利用最优雅的方式写ajax请求的相关内容 这篇文章主要给大家介绍了关于axios进阶实践之利用最优雅的方式写ajax请求的相关资料 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要
  • Linux grep 显示前后几行的信息

    grep 后面带上 A B C 参数可以多显示几行内容 grep A 5 可以显示匹配内容以及后面的5行内容 grep B 5 可以显示匹配内容以及前面的5行内容 grep C 5 可以显示匹配内容以及前后面的5行内容 cat size t
  • QGIS 使用矢量数据(shp)批量裁剪栅格数据(tif)

    前提描述 有一种情况是一个矢量数据有多个元素 比如A省有11个市 那么我用A省的矢量去裁剪栅格的时候 想直接输出11个市域独立的栅格结果 也就是输出11个栅格数据 这个在ArcGIS Pro和Arcmap目前还不能直接做到 用Python肯
  • 线程的三种实现方式

    一 继承Thread类 二 实现Runable接口 对于1 2两种方法应该都会知道的 即使在上java相关的课程中老师一般都会介绍这两种实现的方法 所以这里不赘述了 直接进入第三种第四种的实现方式 三 实现Callable接口 packag
  • 【项目设计】高并发内存池(三)[CentralCache的实现]

    C 学习历程 入门 博客主页 一起去看日落吗 持续分享博主的C 学习历程 博主的能力有限 出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话 也许你现在做的事情 暂时看不到成果 但不要忘记 树 成长之前也要扎根 也要在漫长的时光 中沉淀养
  • QT中学习Opengl---(纹理基本加载opengl写法)

    前言 本文的代码是 LearnOpenGL 中对应代码 这里提供学习 大家喜欢的可去官方网站去看看 LearnOpenGL CNhttps learnopengl cn readthedocs io zh latest 本章为加载纹理 qt
  • 单链表 和 顺序表 实现的 通讯录

    通讯录 前言 通讯录 通讯录的逻辑 通讯录存储结构的选择 顺序表 数组 在堆区开辟的空间 柔性数组 单链表 单链表实现通讯录 进入页面设计 代码效果 看起来比较有那味了 通讯录属性的设计 主函数的设计 AddContact ShowCont
  • mysql内置函数,时间戳与时间类型互转

    from unixtime time stamp gt 将时间戳转换为日期 unix timestamp date gt 将指定的日期或者日期字符串转换为时间戳
  • 域格模组的模拟语音、PCM、I2S

    域格模组的模拟语音 PCM I2S 文章目录 域格模组的模拟语音 PCM I2S 一 域格模块里的音频功能 二 常见音频 传输 接口 1 介绍 2 一目了然的协议时序 I2S协议时序 PCM协议 二 模块中使用音频功能 一 域格模块里的音频
  • 基于MATLAB的车牌识别

    目录 车牌识别系统的介绍与展示 车牌定位 1 灰度处理 2 边缘检测 车牌分割 1 图像腐蚀 2 图像平滑 3 移除对象 4 图像切割 车牌识别 1 灰度处理 2 直方图均衡化 3 二值化 4 中值滤波 5 字符识别 车牌识别系统的介绍与展