搜档网
当前位置:搜档网 › OpenCV的基础光学字符识别(Basic OCR in OpenCV)

OpenCV的基础光学字符识别(Basic OCR in OpenCV)

OpenCV的基础光学字符识别(Basic OCR in OpenCV)
OpenCV的基础光学字符识别(Basic OCR in OpenCV)

https://www.sodocs.net/doc/852966861.html,/sununs11/article/details/7758239

Github源码

From:https://www.sodocs.net/doc/852966861.html,/2008/11/basic-ocr-in-opencv/

在这个教程当中我们将完成一个基础的数字光学字符识别。这包括把一个手写的数字分类进它所属的类里。

为了完成它,们我将要使用我们之前的教程里所有学到的东西,我们将要使用简单的basic painter和the basic pattern recognition and classification with openCV两个教程。

在一个典型的模式识别分类器里,包括三个模块:

预处理(信号获取和滤波)

特征提取(特征向量的计算)

分类(特征向量的分类)

预处理(Preprocessing):在这个模块我们将要处理我们输入的图片,比如大小标准化,彩色图像灰度化等等。

特征提取(Feature extraction):在这个模块我们转换我们处理后的图像为一个特征向量以便于分类,它可能是像素矩阵转换成向量或者获取轮廓编码链的数据表示。

分类模块获取特征向量,并训练我们的系统或者说使用一个分类方法(比如knn)把输入的特征向量分类。

这个基础光学字符识别的流程图如下:

现在我们有由图片组成的一个训练集和一个测试集来训练和测试我们的分类器(knn)。

我们有1000张手写数字的图片,每个数字100张。我们使用每个数字的50张图片来训练,另外50张来测试我们的系统。

接下来我们要做的第一个工作就是对所有训练集的图片预处理,为了完成它我们创建一个预处理函数。在这个函数中,我们输入一张图片和我们想要它在处理后得到的新的长和宽,这个函数讲返回一个标准大小的带有边框的图片。你可以看到更多清楚的处理流程:

预处理代码:

void findX(IplImage* imgSrc,int* min, int* max){

inti;

intminFound=0;

CvMat data;

CvScalarmaxVal=cvRealScalar(imgSrc->width * 255);

CvScalarval=cvRealScalar(0);

//For each col sum, if sum < width*255 then we find the min

//then continue to end to search the max, if sum< width*255 then is new max for (i=0; iwidth; i++){

cvGetCol(imgSrc, &data, i);

val= cvSum(&data);

if(val.val[0]

*max= i;

if(!minFound){

*min= i;

minFound= 1;

}

}

}

}

void findY(IplImage* imgSrc,int* min, int* max){

inti;

intminFound=0;

CvMat data;

CvScalarmaxVal=cvRealScalar(imgSrc->width * 255);

CvScalarval=cvRealScalar(0);

//For each col sum, if sum < width*255 then we find the min

//then continue to end to search the max, if sum< width*255 then is new max for (i=0; iheight; i++){

cvGetRow(imgSrc, &data, i);

val= cvSum(&data);

if(val.val[0]

*max=i;

if(!minFound){

*min= i;

minFound= 1;

}

}

}

}

CvRectfindBB(IplImage* imgSrc){

CvRect aux;

intxmin, xmax, ymin, ymax;

xmin=xmax=ymin=ymax=0;

findX(imgSrc, &xmin, &xmax);

findY(imgSrc, &ymin, &ymax);

aux=cvRect(xmin, ymin, xmax-xmin, ymax-ymin);

//printf("BB: %d,%d - %d,%d\n", aux.x, aux.y, aux.width, aux.height); return aux;

}

IplImagepreprocessing(IplImage* imgSrc,intnew_width, intnew_height){

IplImage* result;

IplImage* scaledResult;

CvMat data;

CvMatdataA;

CvRect bb;//bounding box

CvRectbba;//boundinb box maintain aspect ratio

//Find bounding box

bb=findBB(imgSrc);

//Get bounding box data and no with aspect ratio, the x and y can be corrupted cvGetSubRect(imgSrc, &data, cvRect(bb.x, bb.y, bb.width, bb.height));

//Create image with this data with width and height with aspect ratio 1

//then we get highest size betwen width and height of our bounding box

int size=(bb.width>bb.height)?bb.width:bb.height;

result=cvCreateImage( cvSize( size, size ), 8, 1 );

cvSet(result,CV_RGB(255,255,255),NULL);

//Copy de data in center of image

int x=(int)floor((float)(size-bb.width)/2.0f);

int y=(int)floor((float)(size-bb.height)/2.0f);

cvGetSubRect(result, &dataA, cvRect(x,y,bb.width, bb.height));

cvCopy(&data, &dataA, NULL);

//Scale result

scaledResult=cvCreateImage( cvSize( new_width, new_height ), 8, 1 );

cvResize(result, scaledResult, CV_INTER_NN);

//Return processed data

return *scaledResult;

}

我们使用basicOCR类的getData函数来创建训练数据和训练类,这个函数获取所有在OCR 文件夹下的图片来创建训练数据,OCR文件夹中的每个类是一个文件夹,其中每个文件都是名为cnn.pbm的pbm文件,c是类(0,1,...,9)中的一个,nn是图片的编号(00,01,...,99)。

我们得到的每张图片都是预处理过的了,然后他们将转换成特征向量里的数据以便我们使用。

basicOCR.cpp 获取数据代码:

void basicOCR::getData()

{

IplImage* src_image;

IplImageprs_image;

CvMatrow,data;

char file[255];

inti,j;

for(i =0; i

for( j = 0; j

//Load file

if(j<10)

sprintf(file,"%s%d/%d0%d.pbm",file_path, i, i , j);

else

sprintf(file,"%s%d/%d%d.pbm",file_path, i, i , j);

src_image = cvLoadImage(file,0);

if(!src_image){

printf("Error: Cant load image %s\n", file);

//exit(-1);

}

//process file

prs_image = preprocessing(src_image, size, size);

//Set class label

cvGetRow(trainClasses, &row, i*train_samples + j);

cvSet(&row, cvRealScalar(i));

//Set data

cvGetRow(trainData, &row, i*train_samples + j);

IplImage* img = cvCreateImage( cvSize( size, size ), IPL_DEPTH_32F, 1 ); //convert 8 bits image to 32 float image

cvConvertScale(&prs_image, img, 0.0039215, 0);

cvGetSubRect(img, &data, cvRect(0,0, size,size));

CvMatrow_header, *row1;

//convert data matrix sizexsize to vecor

row1 = cvReshape( &data, &row_header, 0, 1 );

cvCopy(row1, &row, NULL);

}

}

}

在处理并且得到训练数据和类以后我们用我们的模型训练这些数据,在这个例子中我们用knn方法:

knn=new CvKNearest( trainData, trainClasses, 0, false, K );

现在我们可以测试我们的模型了,并且我们可以使用测试的结果来和其它我们使用的方法比较,又或者我们减小图片大小等等。这里是在我们的basicOCR类里创建的一个函数,测试函数。

这个函数获取其它500个样本并且用我们选择的方法分类,再检验得到的结果。

void basicOCR::test(){

IplImage* src_image;

IplImageprs_image;

CvMatrow,data;

char file[255];

inti,j;

int error=0;

inttestCount=0;

for(i =0; i

for( j = 50; j< 50+train_samples; j++){

sprintf(file,"%s%d/%d%d.pbm",file_path, i, i , j);

src_image = cvLoadImage(file,0);

if(!src_image){

printf("Error: Cant load image %s\n", file);

//exit(-1);

}

//process file

prs_image = preprocessing(src_image, size, size);

float r=classify(&prs_image,0);

if((int)r!=i)

error++;

testCount++;

}

}

float totalerror=100*(float)error/(float)testCount;

printf("System Error: %.2f%%\n", totalerror);

}

test函数使用了分类函数,获取图片,处理图片,得到特征向量并且用knn类的find_nearest 函数对其分类。下面

这个函数我们用来分类输入的用户图片:

float basicOCR::classify(IplImage* img, intshowResult)

{

IplImageprs_image;

CvMat data;

CvMat* nearest=cvCreateMat(1,K,CV_32FC1);

float result;

//process file

prs_image = preprocessing(img, size, size);

//Set data

IplImage* img32 = cvCreateImage( cvSize( size, size ), IPL_DEPTH_32F, 1 ); cvConvertScale(&prs_image, img32, 0.0039215, 0);

cvGetSubRect(img32, &data, cvRect(0,0, size,size));

CvMatrow_header, *row1;

row1 = cvReshape( &data, &row_header, 0, 1 );

result=knn->find_nearest(row1,K,0,0,nearest,0);

int accuracy=0;

for(inti=0;i

if( nearest->data.fl[i] == result)

accuracy++;

}

float pre=100*((float)accuracy/(float)K);

if(showResult==1){

printf("|\t%.0f\t| \t%.2f%% \t| \t%d of %d \t| \n",result,pre,accuracy,K); printf(" ---------------------------------------------------------------\n"); }

return result;

}

所有的工作或者训练和测试都在basicOCR类里,当我们创建一个basicOCR的实例时只需要调用classify函数来分类我们输入的图片。然后我们使用我们之前在其它教程里创建的简单的Painter来给用户交互绘出一张图片并且分类它。

译者注:

1.knn,即K最邻近结点算法(k-Nearest Neighbor algorithm),最简单的机器学习算法之一,简单说就是在特征空间里找到周围最近的k个样本,如果这k个样本中的大多数属于某个类,则该样本也属于这个类。

2.painter,GUI编程中的绘图接口,也就是完成绘制和显示图像的功能。

Github源码

一种字符识别算法在自动识别系统中的应用_刘春雨

25卷 第3期2008年3月 微电子学与计算机 MICROELECTRONICS &COMPUTER Vol.25 No.3March 2008 收稿日期:2007-05-08 一种字符识别算法在自动识别系统中的应用 刘春雨,李 俊 (中国科学院计算机网络信息中心,北京100080) 摘 要:基于车牌识别系统的开发,提出一种基于二值图像的字符识别算法.在该算法中,提取字符的点阵特征、特征线和网格特征,分类器采用神经网络.为充分利用各组特征向量的互补作用,采取层次结构来获得系统的最佳性能.实验表明此算法非常有效. 关键词:字符识别;网格特征;神经网络 中图分类号:TP393 文献标识码:A 文章编号:1000-7180(2008)03-0071-03 A Character Recognition Algorithm in the Application of Vehicle License Plate Recognition System LIU Chun 2yu,LI Jun (Computer Network Information Center,Chinese Academy of Sciences,Beijing 100080,China) Abstr act:We extract the features including the Lattice Structure,Key Line and Gr id F eatures.T he network is used as t he classificat ion.To make full of use of all kinds of featur e vectors,the hierarchical algorithm is adapted for optimal per 2formance.We test our algorithms in car number plate database.As the experimental results show,our algor ithm is very efficient. Key words:OCR;grid featur es;nerve network 1 引言 车牌识别系统就是利用光学字符识别技术解决汽车牌照识别的典型系统,它的开发与应用有利于交通的控制与管理,是智能交通系统(IT S)中一个重要组成部分.车牌识别系统的软件部分主要由四部分组成,包括预处理、车牌定位、字符定位与字符识别.这四部分是顺序执行,而每个处理模块都为下一步处理作铺垫,其中字符识别模块是最后一步,也是衡量系统整体性能的一步. 字符识别涉及两个方面,即特征提取和识别方法,二者是继承互补的关系.关于字符的特征提取,目前已有许多经典的算法被提出来.根据字符的图像类型不同,特征提取可以分为彩色特征提取、灰度特征提取和二值特征提取;根据字符特征提取的基础可以分为点阵式统计特征提取,骨架或者细化特 征提取;根据字符特征提取的内容可以分为统计特征的提取,逻辑特征或者笔画特征提取等. 利用二值图像进行字符识别已提出多种算法[126],但识别效率和计算复杂度尚不能令人满意.为此提出新的字符识别算法. 2 算法 经过以上的字符预处理,将二值字符图像送入识别模块,完成字符识别任务.对于二值图像作如下几个步骤:归一化、细化和识别. 2.1 归一化和细化 把分割的二值图像进行线性缩放归一化,这样有利于特征提取和字符识别.归一化就是对实际提取的字符进行缩放操作,最后得到预定大小的字符图像.根据车牌号图片库中提取的4万多个字符样本,统计出样本的平均宽高为:20@16像素,因此利

基于OpenCV识别库的面部图像识别系统的设计

基于OpenCV识别库的面部图像识别系统的设计 本系统采用J2EE技术并以OpenCV开源计算机视觉库技术为基础,实现一套具有身份验证功能的面部图像识别信息管理系统。系统使用MySQL数据库提供数据支撑,依托于J2EE的稳定性和Java平台的可移植性使得本系统可以在各个操作系统平台中运行,同时提供在互联网中使用面部识别技术的一套较为完备的解决方案。 标签:OpenCV;人脸识别;生物学特征 引言 随着信息技术的飞速发展以及互联网的深入普及,越来越多的行业和领域使用信息技术产品以提高工作效率和管理水平。但是由于人们隐私信息的保护意识薄弱,出现了许多信息安全的问题。在人们对于信息安全越来越重视的情况下,许多技术被应用到信息安全领域中来。较为先进的技术有虹膜识别技术、遗传基因识别技术以及指纹识别技术等。而论文采用的是当前热点的面部图像识别技术。 1 系统实现算法及功能分析 1.1 面部图像的生物学特征模型的建立 本系统是利用面部图形的生物学特征来识别不同的人。由于每个人的面部图像都有各自的特征但又具有一定的通性,需要应用生物学中相关知识加以解决。可以利用已有的生物学测量手段以及现有的算法构建人的面部图像生物学特征模型(简称:面部模型),并应用于系统中,面部模型的建立为面部图像识别的功能提供实现依据。 1.2 知识特征库及面部识别引擎的建立 在前述面部模型建立完成后,需要建立相应的知识库以及面部识别引擎方可进行身份的识别。可经过大量数据的采集和分析后建立知识库,并根据知识库的特点建立相应的识别引擎。此识别引擎对外开放,在本系统中提供其它外来程序的调用接口,其它系统能够通过本接口实现识别引擎的调用实现对于面部图形的识别,从而达到识别引擎的可复用性。在技术条件允许的情况下,提供知识库的智能训练以及半自动构建支持。 1.3 面部图像的采集与预处理 本系统中采用了预留API接口,利用USB图形捕获设备采集数据图像。经过USB设备的捕获,使用JMF(Java Media Framework)来处理已捕获的图像数据,对捕获的图像进行面部图行检测和实时定位跟踪。

基于opencv的人脸识别程序-代码详解

#include "cv.h" #include "highgui.h" #include #ifdef _EiC #define WIN32 #endif static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; void detect_and_draw( IplImage* image ); const char* cascade_name = "haarcascade_frontalface_alt.xml";//人脸检测分类器 int main( int argc, char** argv ) { CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; int optlen = strlen("--cascade="); const char* input_name; if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 ) { cascade_name = argv[1] + optlen; input_name = argc > 2 ? argv[2] : 0; } else { cascade_name = "E:\毕业设计\智能机器人动态人脸识别系统\陈建州程序.xml";//分类器路径 input_name = argc > 1 ? argv[1] : 0; } cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); if( !cascade )//如果没有找到分类器,输出以下 { fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); fprintf( stderr, "Usage: facedetect --cascade=\"\" [filename|camera_index]\n" ); return -1;

[作业]OPENCV人脸识别

摘要 人脸检测主要是基于计算机识别的一项数字化技术,用以准确获取人的脸部大小和位置信息,在进行人脸检测时,突出主要的脸部特征,淡化次要的环境、衣着等因素。对于某些情况下,人脸检测也可以计算出人脸,如眼睛,鼻子和嘴等精确的微妙特征。由于在安全检测系统,医学,档案管理,视频会议和人机交互等领域人脸检测系统都有光明的应用前景,因此人脸检测逐渐成为了两个跨学科领域研究的热门话题:人工智能和当前模式识别。本文基于OpenCV视觉库具体的设计并开发了对数字图像中的人脸检测的程序,所采用的人脸检测的原理主要是分类器训练模式(Adaboost算法)提取Haar特征的方法。它在整个软件极其重要的作用,图像中人脸的准确定位和识别都受图像处理好坏的直接影响。本次所设计的软件在图像处理部分所采用的方法是基于Adaboost算法进行Haar特征的提取,在此之上加以通过积分图方法来获取完整的级联分类器结构,进行人脸检测时,OpenCV级联分类器通过Adaboost人脸检测算法进行训练,此后采用不同情况下的实验样本完成精确定位以及检测试验。经过代码的设计和调试,在最后的测试中针对数字图像进行的人脸检测和定位达到了较好的效果,提高了定位和识别的正确率。 关键词:人脸检测,AdaBoost,分类器,OpenCV

Abstract Face detection is mainly based on computer recognition of a digital technology,face size and location information to accurately obtain the person,during face detection, highlight the main facial features,dilute the secondary environment,clothing,and other factors.For some cases,face detection can also calculate a person's face,such as eyes, nose and mouth,and other subtle features accurate.Because in the field of human security detection systems,medical records management,video conferencing,and human-computer interaction face detection system has bright prospects,and therefore face detection is becoming a two interdisciplinary research fields hot topic:artificial intelligence and The current pattern recognition.This article is based.penCV vision library designed and developed specifically for digital image face detection process,the principles used face detection methods are mainly classifier training mode(Adaboost algorithm)to extract Haar features.It is in the vital role of the software,the image of the human face accurately locate and identify all that is good or bad a direct impact on the image processing.This software is designed image processing method used in part based Haar Adaboost algorithm to extract features,on top of this to be to get the full cascade classifier structure by integrating the diagram method for face detection,OpenCV cascade classifier is trained by Adaboost face detection algorithm,then the use of the experimental sample under different circumstances for accurate positioning and testing.Through design and debugging code,face detection and location in the final test for digital images to achieve better results and improve the accuracy of positioning and recognition. Keywords:face detection;AdaBoost;classifier;openCV

基于Opencv的人脸检测源程序(附详细使用说明)

基于Opencv的人脸检测程序 我的电脑上是用visual studio 2015,配置opencv2.4.9,visuanl studio加载opencv的方法百度上可以找到很多,按照要求配置好后以后进行一下操作: 第一步:新建win32应用程序的工程,在该工程以下程序复杂被覆盖win32的几行程序, #include"stdafx.h" #include"opencv2/objdetect.hpp" #include"opencv2/videoio.hpp" #include"opencv2/highgui.hpp" #include"opencv2/imgproc.hpp" #include #include using namespace std; using namespace cv; /** Function Headers */ void detectAndDisplay(Mat frame); /** Global variables */ String face_cascade_name = "haarcascade_frontalface_alt.xml"; String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml"; CascadeClassifier face_cascade; CascadeClassifier eyes_cascade; String window_name = "Capture - Face detection"; /** @function main */ int main(void) { VideoCapture capture; Mat frame; //-- 1. Load the cascades if (!face_cascade.load(face_cascade_name)) { printf("--(!)Error loading face cascade\n"); return -1; }; if (!eyes_cascade.load(eyes_cascade_name)) { printf("--(!)Error loading eyes cascade\n"); return -1; }; //-- 2. Read the video stream capture.open(-1); if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }

基于OpenCv的图像识别

基于2DPCA的人脸识别算法研究 摘要 人脸识别技术是对图像和视频中的人脸进行检测和定位的一门模式识别技术,包含位置、大小、个数和形态等人脸图像的所有信息。由于近年来计算机技术的飞速发展,为人脸识别技术的广泛应用提供了可能,所以图像处理技术被广泛应用了各种领域。该技术具有广阔的前景,如今已有大量的研究人员专注于人脸识别技术的开发。本文的主要工作内容如下: 1)介绍了人脸识别技术的基础知识,包括该技术的应用、背景、研究方向以及 目前研究该技术的困难,并对人脸识别系统的运行过程以及运行平台作了简单的介绍。 2)预处理工作是在原始0RL人脸库上进行的。在图像的预处理阶段,经过了图 象的颜色处理,图像的几何归一化,图像的均衡化和图象的灰度归一化四个过程。所有人脸图像通过上述处理后,就可以在一定程度上减小光照、背景等一些外在因素的不利影响。 3)介绍了目前主流的一些人脸检测算法,本文采用并详细叙述了Adaboost人脸 检测算法。Adaboost算法首先需要创建人脸图像的训练样本,再通过对样本的训练,得到的级联分类器就可以对人脸进行检测。 4)本文介绍了基于PCA算法的人脸特征点提取,并在PCA算法的基础上应用了 改进型的2DPCA算法,对两者的性能进行了对比,得出后者的准确度和实时性均大于前者,最后将Adaboost人脸检测算法和2DPCA算法结合,不仅能大幅度降低识别时间,而且还相互补充,有效的提高了识别率。 关键词:人脸识别 2DPCA 特征提取人脸检测

2DPCA Face Recognition Algorithm Based on The Research Abstract:Face recognition is a technology to detect and locate human face in an image or video streams,Including location, size, shape, number and other information of human face in an image or video streams.Due to the rapid development of computer operation speed makes the image processing technology has been widely applied in many fields in recent years. This paper's work has the following several aspects: 1)Explained the background, research scope and method of face recognition,and introduced the theoretical method of face recognition field in general. 2)The pretreatments work is based on the original ORL face database. In the image preprocessing stage, there are the color of the image processing, image geometric normalization, image equalization and image gray scale normalization four parts. After united processing, the face image is standard, which can eliminate the adverse effects of some external factors. 3)All kinds of face detection algorithm is introduced, and detailed describing the Adaboost algorithm for face detection. Through the Adaboost algorithm to create a training sample,then Training the samples of face image,and obtaining the cascade classifier to detect human face. 4)This paper introduces the facial feature points extraction based on PCA ,and 2DPCA is used on the basis of the PCA as a improved algorithm.Performance is compared between the two, it is concluds that the real time and accuracy of the latter is greater than the former.Finally the Adaboost face detection algorithm and 2DPCA are combined, which not only can greatly reduce the recognition time, but also complement each other, effectively improve the recognition rate. Key words:Face recognition 2DPCA Feature extraction Face detection

光学字符识别

光学字符识别 OCR是英文Optical Character Recognition的缩写,意思是光学字符识别,也可简单地称为文字识别,是文字自动输入的一种方法。它通过扫描和摄像等光学输入方式获取纸张上的文字图像信息,利用各种模式识别算法分析文字形态特征,判断出汉字的标准编码,并按通用格式存储在文本文件中,从根本上改变了人们对计算机汉字人工编码录入的概念。使人们从繁重的键盘录入汉字的劳动中解脱出来。只要用扫描仪将整页文本图像输入到计算机,就能通过OCR软件自动产生汉字文本文件,这与人手工键入的汉字效果是一样的,但速度比手工快几十倍。比如用手机给名片拍照,名片中的姓名、电话号码等信息就会自动识别进入到手机中,从此查询、拨打轻而易举。目前支持该功能的手机主要有摩托罗拉A1200、索爱P990和LG G832等。所以,OCR是一种非常快捷、省力的文字输入方式,也是在文字量比较大的今天,很受人们欢迎的一种输入方式。 由于OCR是一门与识别率拔河的技术,因此如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。而根据文字资料存在的媒体介质不同,及取得这些资料的方式不同,就衍生出各式各样、各种不同的应用。 在此对OCR作一基本介绍,包括其技术简介以及其应用介绍。 OCR的发展 要谈OCR的发展,早在60、70年代,世界各国就开始有OCR的研究,而研究的初期,多以文字的识别方法研究为主,且识别的文字仅为0至9的数字。以同样拥有方块文字的日本为例,1960年左右开始研究OCR的基本识别理论,初期以数字为对象,直至1965至1970年之间开始有一些简单的产品,如印刷文字的邮政编码识别系统,识别邮件上的邮政编码,帮助邮局作区域分信的作业;也因此至今邮政编码一直是各国所倡导的地址书写方式。 OCR可以说是一种不确定的技术研究,正确率就像是一个无穷趋近函数,知道其趋近值,却只能靠近而无法达到,永远在与100%作拉锯战。因为其牵扯的因素太多了,书写者的习惯或文件印刷品质、扫描仪的扫瞄品质、识别的方法、学习及测试的样本……等等,多少都会影响其正确率,也因此,OCR的产品除了需有一个强有力的识别核心外,产品的操作使用方便性、所提供的除错功能及方法,亦是决定产品好坏的重要因素。 一个OCR识别系统,其目的很简单,只是要把影像作一个转换,使影像内的图形继续保存、有表格则表格内资料及影像内的文字,一律变成计算机文字,使能达到影像资料的储存量减少、识别出的文字可再使用及分析,当然也可节省因键盘输入的人力与时间。其处理流程如下图:

基于Opencv的视频人脸检测程序源代码(可运行)

1.打开Microsoft Visual Studio 2008,新建一个Win32控制台项目; 2.配置好项目的包含文件和库文件; 3.将……\OpenCV\data\haarcascades中的haarcascade_frontalface_alt.xml拷贝到所建项目的文件夹中; 4.然后添加代码: #include"stdafx.h" #include"cv.h" #include"highgui.h" #include int_tmain(int argc, _TCHAR* argv[]) { CvCapture* capture=0; /*初始化一个视频捕获操作。告诉底层的捕获api我想从Capture1.avi中捕获图片,底层api将检测并选择相应的解码器并做好准备工作*/ capture = cvCaptureFromFile( "F:\\1.avi"); //设置要读的视频(avi格式) static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml",0,0,0); if( !cascade || !capture ) return -1; storage = cvCreateMemStorage(0); /*创建一个窗口,用“Video”作为窗口的标识符*/ cvNamedWindow( "Video",1); /*如果初始化失败,那么capture为空指针,程序停止,否则进入捕获循环*/ if( capture ) { for(;;) { IplImage* frame = cvQueryFrame( capture ); IplImage* img = NULL; CvSeq* faces; if( !frame ) break; img = cvCloneImage(frame);

基于opencv对图像的预处理

基于opencv 对图像的预处理 1.问题描述 本次设计是基于opencv 结合c++语言实现的对图像的预处理,opencv 是用于开发实时的图像处理、计算机视觉及模式识别程序;其中图像的预处理也就是利用opencv 对图像进行简单的编辑操作;例如对图像的对比度、亮度、饱和度进行调节,同时还可以对图像进行缩放和旋转,这些都是图像预处理简单的处理方法;首先通过opencv 加载一幅原型图像,显示出来;设置五个滑动控制按钮,当拖动按钮时,对比度、亮度、饱和度的大小也会随之改变,也可以通过同样的方式调节缩放的比例和旋转的角度,来控制图像,对图像进行处理,显示出符合调节要求的图像,进行对比观察他们的之间的变化。 2.模块划分 此次设计的模块分为五个模块,滑动控制模块、对比度和亮度调节模块、饱和度调节模块、缩放调节模块、旋转调节模块,他们之间的关系如下所示: 图一、各个模块关系图 调用 调用 调用 调用 滑动控制模块 对比度和亮度调节模块 饱和度调节模块 缩放调节模块 旋转调节模块

滑动控制模块处于主函数之中,是整个设计的核心部分,通过createTrackbar创建五个滑动控制按钮并且调用每个模块实现对图像相应的调节。 3.算法设计 (1)滑动控制: 滑动控制是整个设计的核心部分,通过创建滑动控制按钮调节大小来改变相应的数据,进行调用函数实现对图像的编辑,滑动控制是利用createTrackbar(),函数中包括了滑动控制的名称,滑动控制显示在什么窗口上,滑动变量的地址和它调节的最大围,以及每个控制按钮应该调用什么函数实现什么功能; (2)对比度和亮度的调节: 对比度和亮度的调节的原理是依照线性理论,它的公式如下所示:g(x)=a* f(x) +b,其中f(x)表示源图像的像素,g(x)表示输出图像的像素,参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度,参数b通常被称为偏置(bias),常常被用来控制图像的亮度; (3)饱和度的调节: 饱和度调节利用cvCvtColor( src_image, dst_image, CV_BGR2HSV )将RGB 颜色空间转换为HSV颜色空间,其中“H=Hue”表示色调,“S=Saturation”表示饱和度,“V=Value ”表示纯度;所以饱和度的调节只需要调节S的大小,H 和V的值不需要做任何的改变; (4)旋转的调节: 旋转是以某参考点为圆心,将图像的个点(x,y)围绕圆心转动一个逆时针角度θ,变为新的坐标(x1,y1),x1=rcos(α+θ),y1=rsin(α+θ),其中r是图像的极径,α是图像与水平的坐标的角度的大小; (5)缩放的调节: 首先得到源图像的宽度x和高度y,变换后新的图像的宽度和高度分别为x1和y1,x1=x*f,y1=y*f,其中f是缩放因子; 4.函数功能描述 (1)主函数main()用来设置滑动控制按钮,当鼠标拖动按钮可以得到相应的数据大小,实现手动控制的功能,当鼠标拖动对比度和亮度调节是,主函数调用

基于OpenCV的视频人脸识别系统的设计与实现

摘要 基于生物特征识别的身份认证方法和系统研究一直以来都是计算机图形学和模式识别领域研究的热点,其中,由于人脸的稳定性和可见性,针对人脸识别的算法研究和系统应用最为广泛,本文针对校园内实验室和宿舍安全管理需求,设计和实现了一套针对监控视频的基于OpenCV的人脸识别原型系统,开发语言选用C++,全文内容包括: (1)构建了基于OpenCV的视频人脸识别的技术框架。针对实验室和宿舍安全管理需要,构建了基于OpenCV的视频人脸识别的技术框架,能够完成基于视频的实时人脸识别和身份认定; (2)设计了基于OpenCV的视频人脸快速检测算法。人脸检测是人脸识别的前提,本文采用基于OpenCV的快速人脸检测算法实现视频图像中人脸的快速定位和提取; (3)设计了基于AdaBoost算法的视频人脸识别方法。应用AdaBoost算法实现了针对视频流的快速人脸定位和身份识别,能够实现实时身份认定。 系统基于.NET平台设计,使用C++语言进行实现,完成了基于视频的实时人脸身份认定。 关键词:人脸检测; OpenCV;人脸识别; C++; 1

Abstract Based on the research of identity authentication method and system of biometric recognition has been a hot research field of computer graphics, pattern recognition and the stability and visibility, the face, the algorithm research and system applications of face recognition is the most widely, according to the laboratory and dormitory safety management needs of the campus, designed and implemented. A face recognition system based on OpenCV in surveillance video, development language is C++, the main content of this thesis includes: (1)Constructed the technical framework for video based face recognition based on OpenCV. According to the laboratory and the dormitory safety management needs, establishes a framework for video based face recognition based on OpenCV, which can complete real-time face recognition and identity based on video identification; (2)Design of a fast face detection algorithm in video based on OpenCV. Face detection is the precondition of face recognition, this paper uses OpenCV fast face detection algorithm to locate face in video image and extraction based on;The design use application of OpenCV to provide strong support, based https://www.sodocs.net/doc/852966861.html, platform design. (3)Design of video based face recognition method based on AdaBoost algorithm. Application of AdaBoost algorithm for fast face location and recognition of video stream, which can realize real-time identification. System based https://www.sodocs.net/doc/852966861.html, platform design, implementation is carried out using C++ language, completed the real-time face identity recognition based on video Key word:Face detection;OpenCV;Face recognition;C++;

Microsoft Office直接执行光学字符识别(OCR)

提取图片中的文字Office也能行 微软在Microsoft Office 2003中的工具组件中有一个“Microsoft Office Document Imaging”的组件包,它可以直接执行光学字符识别(OCR),下面笔者就为大家介绍利用Office 2003新增的OCR功能从图片中提取文字的方法。 第一步我们需要安装“Microsoft Office Document Imaging”的组件,点“开始→程序”,在“Microsoft Office 工具” 里点“ Microsoft Office Document Imaging” 即可安装运行(如图1所示)。 图1 安装组件 第二步打开带有文字的图片或电子书籍等,找到你希望提取的页面,按下键盘上的打印屏幕键(PrintScreen)进行屏幕取图。 第三步打开Microsoft Office Word 2003 ,将刚才的屏幕截图粘贴进去;点击“文件”菜单中的“打印”,在安装Microsoft Office Document Imaging组件后,系统会自动安装一个名为“Microsoft Office Document Imaging Writer”的打印机。如图2所示,在“打印机”下拉列表框中选择“Microsoft Office Document Imaging Writer”打印机,其他选项无须额外设置,点击“确定”按钮后,设定好文件输出的路径及文件名(缺省使用源文件名),然后很快就可以自动生成一个MDI格式的文档了。 图2 选择打印机

打开刚才保存的MDI类型文件(如图3所示),根据你的需要用鼠标选择文字内容(被选中的内容在红色的框内),然后单击鼠标右键,在弹出的快捷菜单中选择“将文本发送到Word”,即可将图片内容自动转换为一个新的Word文档,然后你就可以在Word文档中随心所欲地进行编辑了。 图3 将文本发送到Word 提示:如果你不想将转换的内容输入到一个新的Word 文档中,而是希望粘贴到一个已经打开的Word 文档,只需在上面的操作中点击右键菜单的“复制”,然后再到指定文档中执行粘贴即可。()

基于opencv的人脸检测界面开发

摘要 人脸检测(Face Detection)是一种在任意数字图像中找到人脸的位置和大小的计算机技术。它可以检测出面部特征,并忽略诸如建筑物、身体和其他任何东西。人脸检测技术不仅仅是人脸跟踪、人脸识别、表情识别等技术的重要条件,同时在人机交互、模式识别、视频检索、智能监控等领域也引起了广泛的重视。 在通过对人脸检测相关知识进行学习的基础上,本文首先对国内外的人脸检测发展进行了相关分析,阐述了本课题的研究背景及意义;第二章介绍基于Opencv实现人脸检测的相关方法和检测原理;第三章指出了基于QT平台,人脸检测界面如何开发,需要用到的相关技术知识和操作流程。第四章设计了基于opencv的人脸检测程序,采用了QT开发工具并结合opencv技术对程序界面进行设计实现。 关键词:人脸检测;QT开发;Opencv;

Abstract Face detection is a computer technology that identifies human faces in digital images. It can detect facial features and ignore something like buildings,bodies and any other things.Face detection technology is not just an important condition for face recognition, also attracting wide attention in the human-computer interaction, pattern recognition, video retrieval, intelligent monitoring and other fields. Firstly in this paper, through the study of relevant technology of face detection recognition, and face detection to identify relevant experience in the domestic and abroad are analyzed,indicating the background and the significance of the topic.Based on opencv,the second chapter introduces how to realize the design.Then the third chapter points out how to develop face detection’s interface based on the QT platform; The fourth chapter based on opencv face detection procedures, using opencv, the QT development tools,achieve the design. Key Words:Face detection; QT development; Opencv;

光学字符识别解析

光学字符识别系统 摘要:本文设计了一系列的算法,完成了文字特征提取、文字定位等工作,并基于卷积神经网络(CNN)建立了字符识别模型,最后结合统计语言模型来提升效果,构建一个完整的OCR(光学字符识别)系统.在特征提取方面,抛弃了传统的“边缘检测+腐蚀膨胀”的方法,基于一些基本假设,通过灰度聚类、图层分解、去噪等步骤,得到了良好的文字特征,文字特征用于文字定位和模型中进行识别。在文字定位方面,通过邻近搜索的方法先整合特征碎片,得到了单行的文字特征,然后通过前后统计的方法将单行的文字切割为单个字符。在光学识别方面,基于CNN的深度学习模型建立单字识别模型,自行生成了140万的样本进行训练,最终得到了一个良好的单字识别模型,训练正确率为99.7%,测试正确率为92.1%,即便增大图片噪音到15%,也能有90%左右的正确率.最后,为了提升效果,结合了语言模型,通过微信的数十万文本计算常见汉字的转移概率矩阵,由Viterbi算法动态规划,得到最优的识别组合。经过测试,系统对印刷文字的识别有着不错的效果,可以作为电商、微信等平台的图片文字识别工具. 关键字:CNN,特征提取,文字定位,单字识别

1 研究背景和假设 关于光学字符识别(Optical Character Recognition, OCR),是指将图像上的文字转化为计算机可编辑的文字内容,众多的研究人员对相关的技术研究已久,也有不少成熟的OCR技术和产品产生,比如汉王OCR、ABBYY FineReader、Tesseract OCR等. 值得一提的是,ABBYY FineReader 不仅正确率高(包括对中文的识别),而且还能保留大部分的排版效果,是一个非常强大的OCR商业软件. 然而,在诸多的OCR成品中,除了Tesseract OCR外,其他的都是闭源的、甚至是商业的软件,我们既无法将它们嵌入到我们自己的程序中,也无法对其进行改进. 开源的唯一选择是Google的Tesseract OCR,但它的识别效果不算很好,而且中文识别正确率偏低,有待进一步改进. 综上所述,不管是为了学术研究还是实际应用,都有必要对OCR技术进行探究和改进. 将完整的OCR系统分为“特征提取”、“文字定位”、“光学识别”、“语言模型”四个方面,逐步进行解决,最终完成了一个可用的、完整的、用于印刷文字的OCR系统. 该系统可以初步用于电商、微信等平台的图片文字识别,以判断上面信息的真伪.

相关主题