步骤:车辆牌照灰度化——车辆牌照二值化——遍历每一行像素,去掉上下边框及铆钉——遍历每一列像素,去掉左右边框——字符分割——字符匹配(字符匹配采用SSIM方法)

#include<iostream>
#include "stdio.h"
#include <opencv2/opencv.hpp>
#include"match.h"
using namespace cv;int main()
{IplImage*src=cvLoadImage("C:\\Users\\aoe\\Desktop\\chepai\\1.jpg");IplImage*dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);for (int i=0; i<src->height; i++) //将src灰度化得到dst,图像灰度化{                   for (int j=0; j<src->width; j++) {                    CvScalar s = cvGet2D(src, i, j);int grayscale = (int)(s.val[0] * 0.299 + s.val[1] * 0.587 + s.val[2] * 0.114);CvScalar ds;ds.val[0] = grayscale;cvSet2D(dst, i, j, ds);}                         }IplImage*erzhitu = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);for (int i = 0; i<dst->height; i++) //将dst二值化得到erzhitu,图像二值化{for (int j = 0; j<dst->width; j++){CvScalar ls = cvGet2D(dst, i, j);CvScalar ms;if (ls.val[0] > 125)//将阈值人为地定义为125{ms.val[0] = 255;cvSet2D(erzhitu, i, j, ms);}else{ms.val[0] = 0;cvSet2D(erzhitu, i, j, ms);}           }}printf("erzhitu->height=%d\n", erzhitu->height);int flag_height[1000] = {0};int flag = 0;int real_height1 = 0, real_height2 = 0;for (int i = 0; i<erzhitu->height; i++) //统计每一行白色像素的数目{for (int j = 0; j<erzhitu->width; j++){CvScalar ns = cvGet2D(erzhitu, i, j);if (ns.val[0] == 255){flag += 1;}}flag_height[i] = flag;flag = 0;}for (int i = 0; i < erzhitu->height; i++)//从第一行开始遍历,当某一行的像素数大于50且小于200的时候,认为是车牌的开始{if (flag_height[i]>50 && flag_height[i]<200){real_height1 = i;printf("real_height1=%d\n", real_height1);break;}}for (int i = erzhitu->height-1; i>0; i--)//从最后一行开始遍历,当某一行的像素数大于20且小于200的时候,认为是车牌的结束{if (flag_height[i]>50 && flag_height[i]<200){real_height2 = i;printf("real_height2=%d\n", real_height2);break;}}IplImage*erzhitu_xiuzheng = cvCreateImage(cvSize(erzhitu->width,real_height2 - real_height1 + 1), IPL_DEPTH_8U, 1);for (int i = real_height1; i<=real_height2; i++) //得到去掉铆钉后的图像{for (int j = 0; j<erzhitu->width; j++){CvScalar bs = cvGet2D(erzhitu, i, j);cvSet2D(erzhitu_xiuzheng, (i-real_height1), j, bs);}}int flag_width[1000] = { 0 };int flag1 = 0;int real_width1 = 0, real_width2 = 0;for (int i = 0; i<erzhitu_xiuzheng->width; i++) //统计每一列白色像素的数目{for (int j = 0; j<erzhitu_xiuzheng->height; j++){CvScalar ts = cvGet2D(erzhitu_xiuzheng, j, i);if (ts.val[0] == 255){flag1 += 1;}}flag_width[i] = flag1;flag1 = 0;}for (int i = 0; i < erzhitu_xiuzheng->width; i++)//从第一列开始遍历,当某一列的像素数大于100的时候,认为是车牌的开始{if (flag_width[i]>100){real_width1 = i;printf("real_width1=%d\n", real_width1);break;}}for (int i = erzhitu_xiuzheng->width - 1; i>0; i--)//从最后一列开始遍历,当某一列的像素数大于100的时候,认为是车牌的结束{if (flag_width[i]>100){real_width2 = i;printf("real_width2=%d\n", real_width2);break;}}IplImage*erzhitu_xiuzheng1 = cvCreateImage(cvSize(real_width2 - real_width1 - 5, erzhitu_xiuzheng->height), IPL_DEPTH_8U, 1);for (int i = 0; i < erzhitu_xiuzheng->height; i++) //得到去掉周边白框的图像{for (int j = real_width1 + 3; j <= real_width2 - 3; j++){CvScalar ws = cvGet2D(erzhitu_xiuzheng, i, j);cvSet2D(erzhitu_xiuzheng1, i, (j - real_width1 - 3), ws);}}int real_address[7][2];int real_wid1 = -1;int real_wid2 = 0;int record_number = 0;for (int i = 0; i < erzhitu_xiuzheng1->width; i++)//字符分割{int flag1 = 0;for (int j = 0; j < erzhitu_xiuzheng1->height; j++){CvScalar gs = cvGet2D(erzhitu_xiuzheng1, j, i);if (gs.val[0] == 255){if (real_wid1 == -1){real_wid1 = i;}flag1 = 1;break;}}if ((real_wid1 != -1) && flag1 == 0){real_wid2 = i;if ((real_wid2 - real_wid1) < 15){real_wid1 = -1;flag = 0;continue;}real_address[record_number][0] = real_wid1;real_address[record_number][1] = real_wid2;real_wid1 = -1;real_wid2 = 0;record_number += 1;}}for (int i = 0; i < 7; i++){printf("width1[%d]:%d,width1[%d]:%d\n", i, real_address[i][0], i, real_address[i][1]);}for (int i = 0; i < 7; i++)//输出字符分割的结果,并输出匹配的结果{int first_width = real_address[i][0];int second_width = real_address[i][1];int word_width = second_width - first_width;int word_height = erzhitu_xiuzheng1->height;IplImage*word = cvCreateImage(cvSize(word_width, word_height), IPL_DEPTH_8U, 1);for (int j = 0; j < word_height; j++){for (int l = first_width; l < second_width; l++){CvScalar as = cvGet2D(erzhitu_xiuzheng1, j, l);cvSet2D(word, j, (l - first_width), as);}}IplImage*word1 = cvCreateImage(cvSize(20, 40), IPL_DEPTH_8U, 1);cvResize(word, word1, 1);cvNamedWindow("word1");cvShowImage("word1", word1);int final_result=match_ok(word1);match_result(final_result);}cvNamedWindow("src");cvShowImage("src", src);cvNamedWindow("dst");cvShowImage("dst", dst);cvNamedWindow("erzhitu");cvShowImage("erzhitu", erzhitu);cvNamedWindow("erzhitu_xiuzheng");cvShowImage("erzhitu_xiuzheng", erzhitu_xiuzheng);cvNamedWindow("erzhitu_xiuzheng1");cvShowImage("erzhitu_xiuzheng1", erzhitu_xiuzheng1);cvWaitKey(-1);return 0;
}

字符匹配的程序如下所示:

#include "match.h"
using namespace std;
#define match_all 65const char *match_pic[match_all] = {"C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\0.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\1.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\2.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\3.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\4.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\5.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\6.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\7.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\8.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\9.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\A.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\B.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\C.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\D.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\E.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\F.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\G.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\H.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\J.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\K.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\L.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\M.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\N.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\P.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\Q.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\R.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\S.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\T.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\U.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\V.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\W.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\X.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\Y.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\Z.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw1.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw2.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw3.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw4.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw5.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw6.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw7.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw8.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw9.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw10.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw11.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw12.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw13.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw14.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw15.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw16.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw17.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw18.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw19.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw20.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw21.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw22.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw23.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw24.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw25.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw26.bmp","C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw27.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw28.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw29.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw30.bmp", "C:\\Users\\aoe\\Desktop\\chepai\\10_match\\10_match\\match_pic\\zw31.bmp",
};
double match_number[match_all];CvScalar getMSSIM(IplImage*i1, IplImage*i2)
{const double C1 = 6.5025, C2 = 58.5225;/***************************** INITS **********************************/if (i1 == NULL || i2 == NULL)return -1;IplImage *I1 = cvCreateImage(cvGetSize(i1), IPL_DEPTH_32F, i1->nChannels);IplImage *I2 = cvCreateImage(cvGetSize(i2), IPL_DEPTH_32F, i2->nChannels);cvConvert(i1, I1);           // cannot calculate on one byte large valuescvConvert(i2, I2);IplImage *I1_2 = cvCreateImage(cvGetSize(I1), IPL_DEPTH_32F, I1->nChannels);IplImage *I2_2 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);IplImage *I1_I2 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);cvPow(I1, I1_2,2);        // I1^2cvPow(I2, I2_2, 2);        // I2^2cvMul(I1,I2,I1_I2,1);        // I1 * I2/*************************** END INITS **********************************/IplImage *mu1 = cvCreateImage(cvGetSize(I1), IPL_DEPTH_32F, I1->nChannels);IplImage *mu2 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);cvSmooth(I1, mu1,CV_GAUSSIAN, 11,11,1.5);cvSmooth(I2, mu2, CV_GAUSSIAN, 11, 11, 1.5);IplImage *mu1_2 = cvCreateImage(cvGetSize(I1), IPL_DEPTH_32F, I1->nChannels);IplImage *mu2_2 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);IplImage *mu1_mu2 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);cvPow(mu1, mu1_2, 2);        // mu1^2cvPow(mu2, mu2_2, 2);        // mu2^2cvMul(mu1, mu2, mu1_mu2, 1);        // mu1 * mu2IplImage *sigma1_2 = cvCreateImage(cvGetSize(I1), IPL_DEPTH_32F, I1->nChannels);IplImage *sigma2_2 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);IplImage *sigma12 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);cvSmooth(I1_2, sigma1_2,CV_GAUSSIAN,11, 11, 1.5);cvAddWeighted(sigma1_2, 1, I1_2, -1, 0,sigma1_2);cvSmooth(I2_2, sigma2_2, CV_GAUSSIAN, 11, 11, 1.5);cvAddWeighted(sigma2_2, 1, I2_2, -1, 0, sigma2_2);cvSmooth(I1_I2, sigma12, CV_GAUSSIAN, 11, 11, 1.5);cvAddWeighted(sigma12, 1, I1_I2, -1, 0, sigma12);/ FORMULA IplImage *t1 = cvCreateImage(cvGetSize(I1), IPL_DEPTH_32F, I1->nChannels);IplImage *t2 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);IplImage *t3 = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);cvScale(mu1_mu2, t1, 2);cvAddS(t1, cvScalarAll(C1), t1);cvScale(sigma12, t2, 2);cvAddS(t2, cvScalarAll(C2), t2);cvMul(t1, t2, t3, 1);// t3 = ((2*mu1_mu2 + C1).*(2*sigma12 + C2))cvAdd(mu1_2, mu2_2, t1);cvAddS(t1, cvScalarAll(C1), t1);cvAdd(sigma1_2, sigma2_2, t2);cvAddS(t2, cvScalarAll(C2), t2);cvMul(t1, t2, t1, 1);   // t1 =((mu1_2 + mu2_2 + C1).*(sigma1_2 + sigma2_2 + C2))IplImage *ssim_map = cvCreateImage(cvGetSize(I2), IPL_DEPTH_32F, I2->nChannels);cvDiv(t3, t1, ssim_map,1);      // ssim_map =  t3./t1;CvScalar mssim =cvAvg(ssim_map); // mssim = average of ssim mapcvReleaseImage(&i2);cvReleaseImage(&I1);cvReleaseImage(&I2);cvReleaseImage(&I1_2);cvReleaseImage(&I2_2);cvReleaseImage(&I1_I2);cvReleaseImage(&mu1);cvReleaseImage(&mu2);cvReleaseImage(&mu1_2);cvReleaseImage(&mu2_2);cvReleaseImage(&mu1_mu2);cvReleaseImage(&sigma1_2);cvReleaseImage(&sigma2_2);cvReleaseImage(&sigma12);cvReleaseImage(&t1);cvReleaseImage(&t2);cvReleaseImage(&t3);cvReleaseImage(&ssim_map);return mssim;
}int match_ok(IplImage*ii)
{int i, result = 0;CvScalar s;double k = 0;for (i = 0; i<match_all; i++){IplImage*img = cvLoadImage(match_pic[i],0);if (img == NULL)cout << "未载入图像";s = getMSSIM(ii, img);match_number[i] = s.val[0];}for (i = 0; i<match_all; i++){if (match_number[i] > k){k = match_number[i];result = i;}}cout << "k=" << k << endl;return result;
}void match_result(int number)
{char tmp = 'A';if (number<10){printf("%d", number);}else if (number < 35){if (number < 18){tmp = tmp + number - 10;printf("%c", tmp);}else if ((number >= 18) && (number <= 22)){tmp = tmp + number - 9;printf("%c", tmp);}else{tmp = tmp + number - 8;printf("%c", tmp);}}else{switch (number){case 35:printf("藏");break;case 36:printf("川");break;case 37:printf("鄂");break;case 38:printf("甘");break;case 39:printf("赣");break;case 40:printf("贵");break;case 41:printf("桂");break;case 42:printf("黑");break;case 43:printf("泸");break;case 44:printf("吉");break;case 45:printf("翼");break;case 46:printf("津");break;case 47:printf("晋");break;case 48:printf("京");break;case 49:printf("辽");break;case 50:printf("鲁");break;case 51:printf("蒙");break;case 52:printf("闽");break;case 53:printf("宁");break;case 54:printf("青");break;case 55:printf("琼");break;case 56:printf("陕");break;case 57:printf("苏");break;case 58:printf("皖");break;case 59:printf("湘");break;case 60:printf("新");break;case 61:printf("渝");break;case 62:printf("豫");break;case 63:printf("粤");break;case 64:printf("云");break;case 65:printf("浙");break;}}
}

此车辆牌照识别的效果并不是很理想。

opencv-车辆牌照识别(一)相关推荐

  1. mser python车牌识别,基于OPENCV的车辆牌照识别系统研究

    摘要: 在我国汽车工业迅猛发展的今天,汽车保有量的逐年大幅增加,对传统的车辆管理和交通运行方式面临着巨大的压力和挑战.为了解决上述问题,车辆牌照自动识别技术(AVI)应运而生,并发展成为现代智能交通系 ...

  2. 目标检测算法——车辆牌照识别数据集汇总(附下载链接)

  3. 目标检测算法——车辆牌照识别数据集汇总 2(附下载链接)

  4. 基于opencv的车牌识别解析与代码

    Jeremy Lin @HQU 车牌识别太出名了,我也就花几天来了解下这个系统,并结合opencv进行实现.下面是一些介绍: 车辆牌照识别(License Plate Recognition,LPR) ...

  5. 浅析AI边缘计算的车辆/车牌识别技术研发及场景应用

    车牌识别技术是计算机视频图像识别技术在车辆牌照识别中的一种应用,它融合了ORC识别.云计算等多种技术,可将运动中的汽车牌照从复杂的背景中提取并识别出来,通过车牌提取.图像预处理.特征提取.车牌字符识别 ...

  6. 浅析AI智能分析网关的车辆/车牌识别技术的研发及应用场景

    车牌识别技术是计算机视频图像识别技术在车辆牌照识别中的一种应用,它融合了ORC识别.云计算等多种技术,可将运动中的汽车牌照从复杂的背景中提取并识别出来,通过车牌提取.图像预处理.特征提取.车牌字符识别 ...

  7. 基于matlab的汽车牌照识别程序详细教程

    设计一个基于matlab的汽车牌照识别程序,能够实现车牌图像预处理,车牌定位,字符分割,然后通过神经网络对车牌进行字符识别,最终从一幅图像中提取车牌中的字母和数字,给出文本形式的车牌号码. 关键词:车 ...

  8. 基于matlab的汽车牌照识别研究

    1 引言 随着我国交通运输的不断发展,智能交通系统(Intelligent Traffic System,简称ITS)的推广变的越来越重要,而作为ITS的一个重要组成部分,车辆牌照识别系统(vehic ...

  9. 基于matlab的汽车牌照识别程序 (完整的代码+数据集+报告毕业设计)

    设计一个基于matlab的汽车牌照识别程序,能够实现车牌图像预处理,车牌定位,字符分割,然后通过神经网络对车牌进行字符识别,最终从一幅图像中提取车牌中的字母和数字,给出文本形式的车牌号码. 关键词:车 ...

最新文章

  1. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(双分类变量分组:色彩配置、形状配置)实战
  2. windows server 2003 域控制器重命名
  3. [原]IE9 DOM的自定义属性问题
  4. java getname file_Java File getName()方法
  5. BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)
  6. html音频从10秒播放至30秒,基于Arduino制作SD卡音乐播放器
  7. PHP 显示本机的外网IP
  8. html常用标签(form标签)
  9. 贪心法——部分背包问题
  10. c++ map 修改value_哈希表:其实需要哈希的地方都能找到map的身影
  11. 自考那些事儿(七):信息资源管理(总述篇)
  12. vs如何包含库文件以及头文件
  13. zigbee CC2530 系列教程 9 睡眠唤醒实验
  14. 小组作业:学生信息管理系统需求分析
  15. 无线ac管理服务器调试方法,AC功能管理无线AP设置步骤
  16. DruidDataSource配置说明
  17. xp重启计算机的快捷键,xp电脑关机重启快捷键如何使用
  18. 教你前端如何用js写一个跑酷小游戏
  19. java 内部类声明 抽象类_Java 抽象类、接口、内部类
  20. C++继承——宠物的生长

热门文章

  1. 「spacingjs-1.0.7」,点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载,极速在线查看享用。 链接:https://www.aliyundrive.com/s/a87tt
  2. java节假日算法_「国家法定节假日」java 国家法定节假日和双休日判断工具类 - seo实验室...
  3. Hark的数据结构与算法练习之归并排序
  4. 从一道题理解什么是java的引用
  5. ckc交易什么意思_股票熔断是什么意思啊?熔断机制对股民的影响有那些
  6. 如何在ex表格导入php_怎么使用php把表格中的数据导入到excel中,php如何快速导入excel表格数据...
  7. 企业微信的渠道活码怎么用?到底有什么好处?
  8. linux脚本判断文件属性,linux的shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断...
  9. .netcore的mysql链接字符串ConnectionString到底应该怎么设置
  10. Django框架学习--4--分布式路由ORM基础