资源简介
压缩包中包括三个部分:源文件,示例图片,参考文档。该项目实现了对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
- 上一篇:第三次国土调查工作分类图示符号库1比1万
- 下一篇:DFANFA实现
评论
共有 条评论