• 大小: 22KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签: 条形码  

资源简介

c语言 条形码识别

资源截图

代码片段和文件信息

//author: lili
//date:   2011-01-16


#include 
#include 
#include “prog.h“
#include
#include
#include
#include 
#include 
#include
#include

//#define C_H ysize/3
char filename[]=“../../picture2/picture142“;




int round(double adouble b)//不能调用标准库里面的函数,用同名函数代替
{
double j=a/b;
int i=0;
i=(int)a/b;
if((j-0.5) else return (i+1);
}



int Histgram(BYTE *imageint lineByteint ysizeint biBitCount)//long hist[256])
{
//COLORREF pixel;
//BYTE rgbavg;
int sum=0;
int Hist_smooth(int minint max);

/*
if(biBitCount==8){
for (int y=0; y<256; y++) 
{
for (int x=0; x {
//pixel = img_Ori.GetPixel;
r = pColorTable[y].rgbRed;
g = pColorTable[y].rgbGreen;
b = pColorTable[y].rgbBlue;
avg = ((r + g + b)/3);
sum+=avg;
}
}
sum=sum/(lineByte*ysize);
}
else {*/
int ijn;

//for (n =0;n <256;n++)hist[n]=0;
for (j =0;j {
for(i=0;i n=*(image+j*lineByte+i);
//printf(“%7d  “n);
hist[n]++;
}
//printf(“\n“);
}
/*

for(int nn=0;nn<256;nn++){
printf(“%3d:%7d  \n“nnhist[nn]);
}*/
//这里做一个直方图平滑化,有利于获得阈值

int yuzhi1=Hist_smooth(MINMAX);
int yuzhi2=Hist_smooth(MAXMIN);

//printf(“阈值1=%d\n“yuzhi1);
//printf(“阈值2=%d\n“yuzhi2);
int yuzhi=0;
yuzhi=(yuzhi1+yuzhi2)/2;
//yuzhi=yuzhi1;

/*
int mm=0;
int m=0;
for(n=0;n<256;n++){
printf(“%d:“n);
//m=hist[n]/1000;
//for(mm=0;mm printf(“%d“hist[n]);
printf(“\n“);
//if(hist[n]<=hist[n-1]&&hist[n]<=hist[n+1]){sum=n;break;}
}
if(n==256)sum=256/3;
//}*/

return(yuzhi);
}

//直方图平滑化后,直接读取阈值!

int Hist_smooth(int minint max)
{
int mni;
long sum;
//用于判断是否满足阈值条件的函数
int panduanhanshu(int val);
int hist_new[256]={0};
for(n=0;n<256;n++){
sum=0;
for(m=-2;m<=2;m++)
{
i=n+m;
if(i<0)i=0;
if(i>255)i=255;
sum=sum+hist[i];
}
hist_new[n]=(int)((float)sum/5.0+0.5);
}
for(n=0;n<256;n++)
{
hist[n]=hist_new[n];//第二次平滑化的时候可以用~~
//printf(“%3d:%d\n“nhist_new[n]);
}
//printf(“\n“);
//试一下找比左右五个连续小的值,看看和自己定的阈值差距多大
int yuzhi=0;
if(max for(n=min;n>max;n--)
if(panduanhanshu(n)){
return n;
}
}
else {
for(n=min;n {
//if(hist_new[n]<=hist_new[n-1]&&hist_new[n]<=hist_new[n+1])
if(panduanhanshu(n))
{
return n;
//yuzhi=n;
//在看看此值是不是满足小于前后十个值,来判断是不是满足阈值条件
//因为找到的是最早的满足值,所以整体肯定偏小,然后经过一定系数的扩大,在返回
//int tiaojianzhi=0;
//tiaojianzhi=panduanhanshu(n);
//if(tiaojianzhi==1){
//printf(“阈值:%d\n“n+10);
//if(n<=55)return(n+35);
//else if(n>55&&n<60)return (n+23);
//else if(n>=60&&n<=70)return (n+20);
//else return (n+10);
//}
}
}
}
return (100);
}

//判断条件满足,返回1,否则返回0
int panduanh

评论

共有 条评论