资源简介

压缩包中包括三个部分:源文件,示例图片,参考文档。该项目实现了对EAN13,Code39,Code93,Code128的条形码识别,包含了指定编码方式和不指定两种重载方式,代码结构清晰,易于新手理解,易于读者根据需求截取部分代码。旨在互相学习,高手请勿喷,谢谢。

资源截图

代码片段和文件信息

/***
* 基于OpenCV的条形码识别算法实现
* 适用范围:EAN13、Code39、Code93、Code128
* 适用读者:初级图像处理学习者,高手路过勿喷,仅供参考,互相学习
* 编码方式:本文采用C和C++混合编写
* 作者邮箱:xuxin0312@foxmail.com,欢迎交流学习
***/
#include 
#include “cv.h“
#include 
#include 
#include 
#include
using namespace std;

//常用的编码方式
int const EAN13 = 1;
int const Code39 = 2;
int const Code93 = 3;
int const Code128 = 4;


string getCodeBar(IplImage* source int encoding);
string getCodeBar(IplImage* source);
int getEncoding(IplImage* source);
bool isEAN13(IplImage* source);
bool isCode39(IplImage* source);
bool isCode93(IplImage* source);
bool isCode128(IplImage* source);
void getbaseAndStart(IplImage* source int lineHight int thresholdint* base int* start);
int getNumOfPixel(IplImage* source int lineHightint threshold int* index);
string getDigitsEAN13(IplImage* source);
string parseEAN13(string code);
string getDigitsCode39(IplImage* source);
string parseCode39(string code);
string getDigitsCode93(IplImage* source);
string parseCode93(string code);
string getDigitsCode128(IplImage* source);
string parseCode128(string code);

int main() {
char* path = “D:\\g.jpg“;//路径为自定义,条形码尽量居于图片的中间位置,本算法未实现条码的定位。
int encoding = Code128;//上面定义了几种编码方式
IplImage* img = cvLoadImage(path);
clock_t startfinish;
double totaltime;
start = clock();

//string code = getCodeBar(img encoding);//条形码检测入口函数指定编码方式
string code = getCodeBar(img);//条形码检测入口函数,未指定编码方式

finish = clock();
totaltime=finish-start;
cout<<“此程序的运行时间为“< cout<<“条形码为 :“< cvNamedWindow(“Example“CV_WINDOW_AUTOSIZE);
cvShowImage(“Example“img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow(“Example“);
return 0;
}

string getCodeBar(IplImage* source) {
string result = ““;
int encoding = getEncoding(source);
result = getCodeBar(sourceencoding);
return result;
}

string getCodeBar(IplImage* sourceint encoding) {
string codeDigit=““;
string result=““;

switch (encoding) {
case EAN13:
codeDigit = getDigitsEAN13(source);
result = parseEAN13(codeDigit);
break;
case Code39:
codeDigit = getDigitsCode39(source);
result = parseCode39(codeDigit);
break;
case Code93:
codeDigit = getDigitsCode93(source);
result = parseCode39(codeDigit);
break;
case Code128:
codeDigit = getDigitsCode128(source);
result = parseCode128(codeDigit);
break;
}
return result;
}
/*
* 方法描述:获取条码的编码方式
* 输入:图像文件source
* 输出:编码方式,默认返回EAN13
*/
int getEncoding(IplImage* source) {
if(isEAN13(source))
return EAN13;
else if(isCode39(source))
return Code39;
else if(isCode93(source))
return Code93;
else if(isCode128(source))
return Code128;
else
return EAN13;//程序默认为EAN13编码方式
}
/*
* 方法描述:判断条码的编码方式是否为EAN13
* 输入:图像文件source
* 输出:true/false
*/
bool isEAN13(IplImage* source) {
string code = ““;
code = getDigitsEAN13(source);
if(code.length() == 95 && co

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      24994  2016-06-23 12:12  基于OpenCV的条形码识别算法实现\source.cpp

     文件      89323  2016-06-20 09:34  基于OpenCV的条形码识别算法实现\参考文档\Code128编码.docx

     文件      13287  2016-06-14 09:58  基于OpenCV的条形码识别算法实现\参考文档\Code39编码.docx

     文件     701766  2016-06-14 21:36  基于OpenCV的条形码识别算法实现\参考文档\Code93编码.docx

     文件      52107  2016-06-23 12:16  基于OpenCV的条形码识别算法实现\参考文档\EAN13编码方式.docx

     文件       8929  2016-06-21 10:28  基于OpenCV的条形码识别算法实现\示例图片\Code128.jpg

     文件      14240  2016-06-14 19:35  基于OpenCV的条形码识别算法实现\示例图片\Code39.jpg

     文件      12536  2016-06-15 18:45  基于OpenCV的条形码识别算法实现\示例图片\Code93.jpg

     文件      30452  2016-06-12 10:06  基于OpenCV的条形码识别算法实现\示例图片\EAN13.jpg

     目录          0  2016-06-23 12:17  基于OpenCV的条形码识别算法实现\参考文档

     目录          0  2016-06-23 12:18  基于OpenCV的条形码识别算法实现\示例图片

     目录          0  2016-06-23 12:17  基于OpenCV的条形码识别算法实现

----------- ---------  ---------- -----  ----

               947634                    12


评论

共有 条评论