关于vb中的图像识别 我想通过用连接电脑的摄像头获取图像,能够用vb识别出不同面额的人民币,具体怎么做呢?谢谢大家! 会尽快结帖给分! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在初级的AI图像识别中,可以采用色彩比的方式进行图像随机取点来作为特征码,取点的数量越多相对识别准确率也就越高,但是这种方法很容易受到光源的影响。而且每个摄像头的清晰度以及装配位置肯定有差别,这就需要对每一个设备进行识别参数配置。再深一级的AI图像识别可以用形状比以及配合光源校对色彩比综合识别,不过在逻辑上就会复杂很多。建议从初级方式AI识别做起,固定光源(起码偏差不大),这样才好设置识别参数。程序部分其实主要是进行一些基本的色彩过滤和色彩运算,最好结合一些图像处理过程再进行识别,比如锐化、光源色差处理、多项关键色二值化处理等,然后再通过阶层特征分析识别。 引用 2 楼 yuseqing 的回复:引用 1 楼 supermanking 的回复:自己对图像做特征码,然后固定光源环境,识别就方便了。不过对于仿真度较高的假币,还是有一定的风险性嗯谢谢 请问下做特征码具体应该怎样做呢? 不知道有没有相关的代码模块等 自己还是没有思路在初级的AI图像识别中,可以采用色彩比的方式进行图像随机取点来作为特征码,取点的数量越多相对识别准确率也就越高,但是这种方法很容易受到光源的影响。而且每个摄像头的清晰度以及装配位置肯定有差别,这就需要对每一个设备进行识别参数配置。再深一级的AI图像识别可以用形状比以及配合光源校对色彩比综合识别,不过在逻辑上就会复杂很多。建议从初级方式AI识别做起,固定光源(起码偏差不大),这样才好设置识别参数。程序部分其实主要是进行一些基本的色彩过滤和色彩运算,最好结合一些图像处理过程再进行识别,比如锐化、光源色差处理、多项关键色二值化处理等,然后再通过阶层特征分析识别。 这个函数可以进行模糊或锐化处理,只要设置好基数和权值就可以简单的实现你要的效果DWORD _stdcall BlurryFilter(long PicW, long PicH, BYTE* BitmapBytes, long BlurrySize, long AuthorityValue, long AuthorityBasic){ long Wgt; long KernelBound; long BitmapWidthByteSize; long X; long Y; long i; long j; long NowByteX; long NowByteY; long ColorR; long ColorG; long ColorB; long * Kernel; long ForCount; KernelBound = BlurrySize/2; ForCount=KernelBound*2+1; Wgt = BlurrySize * BlurrySize; Kernel = (long *)calloc(Wgt,4); for(X=0; X<Wgt; X++){ Kernel[X]=AuthorityBasic; } Kernel[(Wgt/2)]=AuthorityValue; //取得基本信息 BitmapWidthByteSize = PicW * 3; if(BitmapWidthByteSize%2!=0){ BitmapWidthByteSize++; } //开始进行模糊处理 for(Y=KernelBound; Y<PicH-1-KernelBound; Y++){ for(X=KernelBound; X<PicW-1-KernelBound; X++){ ColorR = 0; ColorG = 0; ColorB = 0; for(j=0; j<ForCount; j++){ for(i=0; i<ForCount; i++){ NowByteX = (X+(i-KernelBound))*3; NowByteY = (Y+(j-KernelBound))*BitmapWidthByteSize; ColorB = ColorB + (long)Kernel[(j*BlurrySize)+i] * (long)BitmapBytes[NowByteY+NowByteX]; ColorG = ColorG + (long)Kernel[(j*BlurrySize)+i] * (long)BitmapBytes[NowByteY+NowByteX+1]; ColorR = ColorR + (long)Kernel[(j*BlurrySize)+i] * (long)BitmapBytes[NowByteY+NowByteX+2]; } } ColorR = ColorR / Wgt; ColorG = ColorG / Wgt; ColorB = ColorB / Wgt; if(ColorR<0){ ColorR=0; } if(ColorR>255){ ColorR=255; } if(ColorG<0){ ColorG=0; } if(ColorG>255){ ColorG=255; } if(ColorB<0){ ColorB=0; } if(ColorB>255){ ColorB=255; } NowByteX = X*3; NowByteY = Y*BitmapWidthByteSize; //if(NowByteY+NowByteX>=2810){ // NowByteX = NowByteX; //} BitmapBytes[NowByteY+NowByteX]=(BYTE)floor(ColorB); BitmapBytes[NowByteY+NowByteX+1]=(BYTE)floor(ColorG); BitmapBytes[NowByteY+NowByteX+2]=(BYTE)floor(ColorR); } } return 0;} 嗯谢谢SupermanKing 不知道vb中如何实现呢? 另外 直接识别颜色,因为每种人民币得颜色都不一样,然后再通过扫描得出摄像头范围内最多的一种颜色,取出即可 这个方案感觉简单些吧? vb如何识别出哪种颜色多呢? 消息生成、消息发送 vb关于日期的一个小疑问 recordcount一直是-1 那位高手告诉我怎样在报表中输出饼图,条状图或别的之类的统计图形? 各位高手大哥,有一个简单的问题请教 怎么样在窗体上创建一个矩形的透明区域 我想在一个窗体上实现下面功能 如何在窗口标题栏添加按钮? 星星怎么弄来的? 如何在记录源断开之后,记录集中检索到的数据仍然可用,就像没有断开时一样? vb报“class does not support automation or does not support expected interface ” Windows2003Server下没有Regexp对象咋办?
数量越多相对识别准确率也就越高,但是这种方法很容易受到光源的影响。而且每个摄像头
的清晰度以及装配位置肯定有差别,这就需要对每一个设备进行识别参数配置。
再深一级的AI图像识别可以用形状比以及配合光源校对色彩比综合识别,不过在逻辑上就
会复杂很多。建议从初级方式AI识别做起,固定光源(起码偏差不大),这样才好设置识别
参数。程序部分其实主要是进行一些基本的色彩过滤和色彩运算,最好结合一些图像处理
过程再进行识别,比如锐化、光源色差处理、多项关键色二值化处理等,然后再通过阶层
特征分析识别。
引用 1 楼 supermanking 的回复:
自己对图像做特征码,然后固定光源环境,识别就方便了。
不过对于仿真度较高的假币,还是有一定的风险性
嗯谢谢 请问下做特征码具体应该怎样做呢? 不知道有没有相关的代码模块等 自己还是没有思路
在初级的AI图像识别中,可以采用色彩比的方式进行图像随机取点来作为特征码,取点的
数量越多相对识别准确率也就越高,但是这种方法很容易受到光源的影响。而且每个摄像头
的清晰度以及装配位置肯定有差别,这就需要对每一个设备进行识别参数配置。
再深一级的AI图像识别可以用形状比以及配合光源校对色彩比综合识别,不过在逻辑上就
会复杂很多。建议从初级方式AI识别做起,固定光源(起码偏差不大),这样才好设置识别
参数。程序部分其实主要是进行一些基本的色彩过滤和色彩运算,最好结合一些图像处理
过程再进行识别,比如锐化、光源色差处理、多项关键色二值化处理等,然后再通过阶层
特征分析识别。
long PicH,
BYTE* BitmapBytes,
long BlurrySize,
long AuthorityValue,
long AuthorityBasic)
{
long Wgt;
long KernelBound;
long BitmapWidthByteSize;
long X;
long Y;
long i;
long j;
long NowByteX;
long NowByteY;
long ColorR;
long ColorG;
long ColorB;
long * Kernel;
long ForCount;
KernelBound = BlurrySize/2;
ForCount=KernelBound*2+1;
Wgt = BlurrySize * BlurrySize;
Kernel = (long *)calloc(Wgt,4);
for(X=0; X<Wgt; X++){
Kernel[X]=AuthorityBasic;
}
Kernel[(Wgt/2)]=AuthorityValue;
//取得基本信息
BitmapWidthByteSize = PicW * 3;
if(BitmapWidthByteSize%2!=0){
BitmapWidthByteSize++;
}
//开始进行模糊处理
for(Y=KernelBound; Y<PicH-1-KernelBound; Y++){
for(X=KernelBound; X<PicW-1-KernelBound; X++){
ColorR = 0;
ColorG = 0;
ColorB = 0;
for(j=0; j<ForCount; j++){
for(i=0; i<ForCount; i++){
NowByteX = (X+(i-KernelBound))*3;
NowByteY = (Y+(j-KernelBound))*BitmapWidthByteSize;
ColorB = ColorB + (long)Kernel[(j*BlurrySize)+i] * (long)BitmapBytes[NowByteY+NowByteX];
ColorG = ColorG + (long)Kernel[(j*BlurrySize)+i] * (long)BitmapBytes[NowByteY+NowByteX+1];
ColorR = ColorR + (long)Kernel[(j*BlurrySize)+i] * (long)BitmapBytes[NowByteY+NowByteX+2];
}
}
ColorR = ColorR / Wgt;
ColorG = ColorG / Wgt;
ColorB = ColorB / Wgt;
if(ColorR<0){ ColorR=0; }
if(ColorR>255){ ColorR=255; }
if(ColorG<0){ ColorG=0; }
if(ColorG>255){ ColorG=255; }
if(ColorB<0){ ColorB=0; }
if(ColorB>255){ ColorB=255; }
NowByteX = X*3;
NowByteY = Y*BitmapWidthByteSize;
//if(NowByteY+NowByteX>=2810){
// NowByteX = NowByteX;
//}
BitmapBytes[NowByteY+NowByteX]=(BYTE)floor(ColorB);
BitmapBytes[NowByteY+NowByteX+1]=(BYTE)floor(ColorG);
BitmapBytes[NowByteY+NowByteX+2]=(BYTE)floor(ColorR);
}
}
return 0;
}
通过扫描得出摄像头范围内最多的一种颜色,取出即可 这个方案感觉简单些吧? vb如何识别出哪种颜色多呢?