我想通过用连接电脑的摄像头获取图像,能够用vb识别出不同面额的人民币,具体怎么做呢?
谢谢大家! 会尽快结帖给分!

解决方案 »

  1.   

    在初级的AI图像识别中,可以采用色彩比的方式进行图像随机取点来作为特征码,取点的
    数量越多相对识别准确率也就越高,但是这种方法很容易受到光源的影响。而且每个摄像头
    的清晰度以及装配位置肯定有差别,这就需要对每一个设备进行识别参数配置。
    再深一级的AI图像识别可以用形状比以及配合光源校对色彩比综合识别,不过在逻辑上就
    会复杂很多。建议从初级方式AI识别做起,固定光源(起码偏差不大),这样才好设置识别
    参数。程序部分其实主要是进行一些基本的色彩过滤和色彩运算,最好结合一些图像处理
    过程再进行识别,比如锐化、光源色差处理、多项关键色二值化处理等,然后再通过阶层
    特征分析识别。
      

  2.   

    引用 2 楼 yuseqing 的回复:
    引用 1 楼 supermanking 的回复:
    自己对图像做特征码,然后固定光源环境,识别就方便了。
    不过对于仿真度较高的假币,还是有一定的风险性
    嗯谢谢 请问下做特征码具体应该怎样做呢? 不知道有没有相关的代码模块等 自己还是没有思路
    在初级的AI图像识别中,可以采用色彩比的方式进行图像随机取点来作为特征码,取点的
    数量越多相对识别准确率也就越高,但是这种方法很容易受到光源的影响。而且每个摄像头
    的清晰度以及装配位置肯定有差别,这就需要对每一个设备进行识别参数配置。
    再深一级的AI图像识别可以用形状比以及配合光源校对色彩比综合识别,不过在逻辑上就
    会复杂很多。建议从初级方式AI识别做起,固定光源(起码偏差不大),这样才好设置识别
    参数。程序部分其实主要是进行一些基本的色彩过滤和色彩运算,最好结合一些图像处理
    过程再进行识别,比如锐化、光源色差处理、多项关键色二值化处理等,然后再通过阶层
    特征分析识别。
      

  3.   

    这个函数可以进行模糊或锐化处理,只要设置好基数和权值就可以简单的实现你要的效果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;
    }
      

  4.   

    嗯谢谢SupermanKing 不知道vb中如何实现呢? 另外 直接识别颜色,因为每种人民币得颜色都不一样,然后再
    通过扫描得出摄像头范围内最多的一种颜色,取出即可 这个方案感觉简单些吧? vb如何识别出哪种颜色多呢?