版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DSP图像处理与应用课程设计基于DM642的人脸检测与识别作者 学号 学院 电子信息工程学院 班级 电子1102 指导教师 时间 2013年12月 Contents1介绍22知识回顾22.1 奇偶场22.2 YUV色彩空间32.3 图像缓存区33编程思路44设计方法44.1 图像二值化54.2 人脸范围的捕捉54.3 人脸识别算法64.4 名字显示75实验结果96实验感想117附录121 介绍随着社会的不断进步以及各方面对于快速有效的自动身份验证的迫切要求,生物特征识别技术在近几十年中得到了飞速的发展。作为人的一种内在属性,并且具有很强的自身稳定性及个体差异性,生物特征成为了自动身份验证的最理
2、想依据。当前的生物特征识别技术主要包括有:指纹识别,视网膜识别,虹膜识别,步态识别,静脉识别,人脸识别等。与其他识别方法相比,人脸识别由于具有直接,友好,方便的特点,使用者无任何心理障碍,易于为用户所接受,从而得到了广泛的研究与应用。此次研究报告,我们以所学DSP图像处理技术相关知识为背景,基于DM642芯片来实现对人脸的识别。实验的预期效果为,当A同学出现在摄像头前,屏幕上会显示与其对应的名字,当B同学出现在摄像头前,会显示与其对应的名字,而没有人在摄像头前会显示无字,从而实现人脸检测与识别。报告内容安排大致如下,首先我们进行所用知识进行简要的回顾,其次是提出编程思路,紧接着我们对关键的设计
3、程序进行详细分析与解释,之后是实验结果展示,最后是实验总结。2 知识回顾2.1 奇偶场PAL制式的模拟图像转换为数字图像后包含576行*720列个像素,一帧图像分解为奇数场和偶数场两幅图像 ,分别包含288行*720列个像素。一个场由帧中的奇数行组成,叫做奇场,另一个场由帧中的偶数行组成,叫做偶场。图2-1-1 奇偶场示意图2.2 YUV色彩空间在彩色视频信号传输中采用的YUV合成的方法。Y 代表亮度信息,U(Cb)代表蓝色色差(就是蓝色信号与亮度信号之间的差值),V(Cr)代表红色色差。YCbCr是YUV的一个特例。Y是亮度值信号,Cb、Cr是色差信号。图像处理与传输中,只传输和存储Y和Cb
4、、Cr值,而且Cb和Cr的分辨率可以比Y低。这就减少了表示图像的数据量。在本图像处理实验中采用YCbCr211的格式。各色彩分量之间相关性小,适于进行处理操作。色差信号常做2:1 抽样处理以节省带宽。对于每2个像素,Y 用2 个字节, Cb(蓝色色差)取相同的值,用一个字节,Cr (红色色差)取相同的值,用一个字节,平均每个像素2个字节。2.3 图像缓存区图像缓冲区包括图像采集缓冲区、图像临时缓冲区和图像显示缓冲区。每个缓冲区包括图像亮度缓冲区Y、图像色度缓冲区Cb、图像色度缓冲区Cr。其中色度缓冲区的大小是亮度缓冲区的一半,每个像素对应的Y(亮度)、Cb、Cr(色度)值在缓冲区中位置序号如下
5、。像素亮度值在Y(亮度)缓冲区中的序号=缓冲区的起始地址+所在行号*每行的像素数+像素的列位置。像素色度值在Cb、Cr(色度)缓冲区中的序号=缓冲区的起始地址+所在行号*每行的像素数/2+像素的列位置/2。3 编程思路图3-1 编程思路首先我们对屏幕中的图像进行二值化,把符合人肤色的像素点设置为白色,把背景设置为黑色。然后我们进行人脸范围的捕捉,找出白色区域的左边界begX,右边界endX,上边界begY,下边界endY,然后根据找出的边界画出边框。最后我们利用某种算法实现人脸的识别,我们主要有两个编程思路,第一种是求出矩形框中白色区域所占的比例来实现人脸的识别,另一种是通过分析脸的上边界与下
6、边界之间的长度来实现人脸识别。识别完成后,根据识别的结果在屏幕上显示识别出来的人的名字,从而实现人脸识别。4 设计方法本部分,我们对此次设计的关键程序进行分析与解释,主程序详见附录。4.1 图像二值化程序如下,根据肤色的色差范围把图形二值化。根据经验,我们把当像素点的蓝色色差Cb大于77小于177并且红色色差Cr大于133小于156时,将此像素点视为肤色的颜色。因此我们把亮度设置为白色(0xff),不在肤色色差范围内的我们把亮度设置为黑色。由于色差Cb和Cr每两个像素点只占用一个字节,而亮度Y每一个像素占用一个字节,因此在本程序中我们只设置了一个i值,对于奇场来说,总像素点有720*288个,
7、在此i值的大小为numLines*numPixels/4,即720*144,因此它可以表示奇场中的色差坐标。同理偶场。我们通过判断把tmpYbuffer+i*2和tmpYbuffer+i*2+1的值设置为白色或者黑色。另外,通过这种定义方法,我们可以在同一个对i的循环中实现对奇场和偶场的处理,并不需要在对列像素再做循环。for(i=0;i<numLines*numPixels/4;i+) if(*(Uint8 *)(tmpCbbuffer+i)>77) && (*(Uint8 *)(tmpCbbuffer+i)<177) &&(*(Uint8
8、*)(tmpCrbuffer+i)>133)&&(*(Uint8 *)(tmpCrbuffer+i)<156) (*(Uint8 *)(tmpYbuffer+i*2)=0xff; (*(Uint8 *)(tmpYbuffer+i*2+1)=0xff; (*(Uint8 *)(tmpYbuffer+i*2+numLines*numPixels/2)=0xff;(*(Uint8 *)(tmpYbuffer+i*2+1+numLines*numPixels/2)=0xff; else(*(Uint8 *)(tmpYbuffer+i*2)=0x00;(*(Uint8 *)(
9、tmpYbuffer+i*2+1)=0x00;(*(Uint8 *)(tmpYbuffer+i*2+numLines*numPixels/2)=0x00;(*(Uint8 *)(tmpYbuffer+i*2+1+numLines*numPixels/2)=0x00; 4.2 人脸范围的捕捉如下程序是实现寻找人脸所在范围的左边界、右边界、上边界和下边界。我们先对行进行循环,在对同一行的列进行循环。根据像素亮度条件找到肤色区域的最右边的点与肤色区域宽度,让最右边点对应的j减去宽度则得到最左边的点。同上下边界。理寻找因此将找到最右边的点将找到的左边界的值放到begX里面,右边界的值放到endX里面,
10、上边界的值放到begY里面,下边界的值放到endY里面。for (i=15 ;i<numLines/2-18;i+) for (j=10;j<numPixels-10;j+) if (*(Uint8 *)(tmpYbuffer+i*numPixels+j)=0xff) curnum+; if (curnum>pixelnum) pixelnum=curnum; begX=j-pixelnum; endX=j; c=begX; d=endX; curnum=0; pixelnum=0; curnum=0; /计算Y起点与终点 for (j=10;j<numPixels-1
11、0;j+) for (i=15;i<numLines/2-18;i+) if (*(Uint8 *)(tmpYbuffer+i*numPixels+j)=0xff) /黑色 curnum+; if (curnum>pixelnum)pixelnum=curnum; begY=i-pixelnum; endY=i; e=begY; f=endY; curnum=0; 4.3 人脸识别算法方案一:如下程序是我们实现人脸识别的第一种方案,即求出所画边框中肤色像素所占的比例,通过该比例实现不同人之间的识别。如上,a为人脸在整个矩形框中所占的像素点,b为矩形框的所有像素点,g=(double
12、)a/(double)b即为人脸的范围所占的比例,通过判断该比例实现人脸识别。如上h为1时,显示“王”字,h为2时,显示“黄”字,h为3时,显示“无”字。此方法是个粗略的识别方法,因此实际操作中有一定识别误差。/计算框内白像素百分比 b=(d-c)*(f-e); for(j=e;j<f;j+) for(i=c;i<d;i+) if (*(Uint8 *)(tmpYbuffer+i*numPixels+j)=0xff) a+; g=(double)a/(double)b; if(g!=0) if(g<0.25) h=2; else h=1; elseh=3;方案二:如下程序是我
13、们实现人脸识别的第二种方案,即找出人脸的上边界与下边界之间的距离,即人脸的数值高度,从而判断出不同的人,同样,h为1时,显示“王”字,h为2时,显示“黄”字,h为3时,显示“无”字。这种方法要求人脸固定于屏幕的某个特定位置。g=f-e;if(g<10)h=3;else if(g>210)h=1;else h=2;4.4 名字显示如下程序使我们的名字显示部分,如下通过人脸识别过程中识别的h值显示不同的名字,当h为1时,显示“王”字,h为2时,显示“黄”字,h为3时,显示“无”字。本程序,我们定义的字体的大小为32*32,数组中每一个八位二进制数值对应八个像素点,每次判断八位数值中的一
14、位,当其为1时,在屏幕上显示黑色,为0时显示白色。void NAME(int init_lie, int init_hang,int wenzi) unsignedint i=0,j=0, num=0,n=0;/static unsigned int num;unsigned char test_word=0x80,tre_coast=0x00;/while(F16x16num!='0')for(i=init_hang;i<init_hang+32;i+)for(j=init_lie;j<init_lie+32;j+) n=j-init_lie;if(j=init_
15、lie|(n%8=0)if(wenzi=1)tre_coast=wangnum;else if(wenzi=3)tre_coast=WUnum;else if(wenzi=2)tre_coast=huangnum;num+;if(test_word&tre_coast)*(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0x00;else *(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0xff;tre_coast=tre_coast<<1;num=0;for(i=numLines/2+init_han
16、g;i<numLines/2+init_hang+32;i+)for(j=init_lie;j<init_lie+32;j+) n=j-init_lie;if(j=init_lie|(n%8=0)if(wenzi=1)tre_coast=wangnum;else if(wenzi=2)tre_coast=huangnum;else if(wenzi=3)tre_coast=WUnum;num+;tre_coast=tre_coast<<1;if(test_word&tre_coast)*(Uint8 *)(tmpYbuffer + i*numPixels + j
17、) = 0x00;else *(Uint8 *)(tmpYbuffer + i*numPixels + j) = 0xff;5 实验结果6 实验感想为期半个学期的DSP课程的学习就此告一段落,通过此次结课设计,我们利用所学知识,最终克服困难实现了。总体来讲,我们收获颇丰。首先,通过此次结课设计,我们又进一步掌握利用DSP进行图像处理的方法,了解利用仿真软件以及实验箱的对DSP图像的相关设计过程,特别是实验中所实现的图像二值化、人脸捕捉,画边框,显示名字等功能,无不体现着课堂中所学关于图像采集、阈值分割以及图像处理的相关知识,可以说这次结课设计就是对这半个学期所学内容的很好总结。其次,此次设计我
18、们并非一帆风顺,我们选择题目以后,收集了多方面的资料进行查阅,并及时交流讨论,通过这个过程,我们对所学知识有了更加多面的理解。比如关于奇偶场图像处理这一块,上课的时候虽然老师给过例程,但是通过我们查找的很多资料进行参考后有了更加简单的算法,可以说这给予了我们的学习的动力。总之,结合着我们的所学理论知识,我们对于本次设计所用的相关知识有了更加深入的理解。当然,通过这次研讨,我们也存在着遗憾,那就是关于程序在BIOS上的实现还没有完成。我们曾经做过尝试,因为考虑到BIOS是个更加底层的系统,它更面向硬件,因此处理速度更快。但是,我们却遇到了诸如不能合适地建立临时缓存区这个问题,我们也请教过老师,但
19、是由于所学知识的局限性以及设计截止日期的紧迫性,我们最终还是选择不在BIOS上实现了。通过此课程的学习我们已经对DSP图像处理萌生了兴趣,在今后的学习中我们一定会在多做尝试。最后,衷心感谢高海林老师长达半个学期的实验讲授以及对本设计的指导!7 附录/*/* Copyright 2004 by SEED Incorporated.*/* All rights reserved. Property of SEED Incorporated.*/* Restricted rights to use, duplicate or disclose this code are*/* granted thr
20、ough contract. */* */*/#include <csl.h>#include <csl_emifa.h>#include <csl_i2c.h>#include <csl_gpio.h>#include <csl_irq.h>#include <csl_chip.h>#include <csl_dat.h>#include "iic.h"#include "vportcap.h"#include "vportdis.h"#includ
21、e "sa7121h.h"#include "TVP51xx.h"#include "seeddm642.h" const unsigned char WU=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xE0,0x0F,0xFF,0xFF,0xF0,0x04,0x03,0x80,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0
22、x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x10,0x00,0x03,0x00,0x38,0x3F,0xFF,0xFF,0xFC,0x30,0x03,0x60,0x00,0x00,0x03,0x60,0x00,0x00,0x07,0x60,0x00,0x00,0x06,0x60,0x00,0x00,0x06,0x60,0x00,0x00,0x0E,0x60,0x00,0x00,0x0C,0x60,0x00,0x00,0x0C,0x60,0x00,0x00,0x18,0x60,0x08,0x00,0x38,0x60,0x08,0x00,0x30,0
23、x60,0x08,0x00,0x60,0x60,0x08,0x00,0xC0,0x60,0x0C,0x03,0x80,0x60,0x1E,0x07,0x00,0x7F,0xFC,0x1C,0x00,0x3F,0xF8,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;/*-黄-*/ const unsigned char huang=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x1C,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0
24、x70,0x0F,0xFF,0xFF,0xF0,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x18,0x7F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFE,0x00,0x01,0x80,0x00,0x01,0x01,0x80,0x80,0x01,0xFF,0xFF,0xC0,0x01,0x81,0x81,0xC0,0x01,0x81,0x81,0x80,0x01,0x81,0x81,0x80,0x01,0x81,0x81,0x80,0x01,0xFF,0xFF,0x80,0x01,0x81,0x81,0
25、x80,0x01,0x81,0x81,0x80,0x01,0x81,0x81,0x80,0x01,0xFF,0xFF,0x80,0x01,0x98,0x01,0x80,0x00,0x3C,0x1C,0x00,0x00,0x78,0x07,0x80,0x00,0xE0,0x03,0xE0,0x03,0x80,0x00,0xF0,0x0E,0x00,0x00,0x70,0x18,0x00,0x00,0x30,0x00,0x00,0x00,0x00, ;/*-王-*/const unsigned char wang=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x
26、00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x70,0x0F,0xFF,0xFF,0xF8,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0xC0,0x07,0xFF,0xFF,0xE0,0x
27、03,0xFF,0xFF,0xE0,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x18,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,;E
28、MIFA_Config Seeddm642ConfigA =0x00052078,/*gblctl EMIFA(B)global control register value */*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/0xffffffd3,/*cectl0 CE0 space control register value*/*将CE0空间设为SDRAM*/0x73a28e01,/*cectl1 CE1 space control register value*/*Read hold: 1 clock;MTYPE : 0000,选择8位的异步接口Read
29、 strobe :001110;14个clock宽度TA:2 clock; Read setup 2 clock;Write hold :2 clock; Write strobe: 14 clockWrite setup :7 clock-14c/1c-/ */0x22a28a22, /*cectl2 CE2 space control register value*/0x22a28a42, /*cectl3 CE3 space control register value*/0x57115000, /*sdctl SDRAM control register value*/0x000008
30、1b, /*sdtim SDRAM timing register value*/0x001faf4d, /*sdext SDRAM extension register value*/0x00000002, /*cesec0 CE0 space secondary control register value*/0x00000002, /*cesec1 CE1 space secondary control register value*/0x00000002, /*cesec2 CE2 space secondary control register value*/0x00000073 /
31、*cesec3 CE3 space secondary control register value*/;I2C_Config SEEDDM642IIC_Config = 0, /* master mode, i2coar;采用主模式 */ 0, /* no interrupt, i2cimr;只写,不读,采用无中断方式*/ (20-5), /* scl low time, i2cclkl; */ (20-5), /* scl high time,i2cclkh; */ 1, /* configure later, i2ccnt;*/ 0, /* configure later, i2csar
32、;*/ 0x4ea0, /* master tx mode, */ /* i2c runs free, */ /* 8-bit data + NACK */ /* no repeat mode */ (75-1), /* 4MHz clock, i2cpsc */;CHIP_Config SEEDDM642percfg = CHIP_VP2+CHIP_VP1+CHIP_VP0+CHIP_I2C;I2C_Handle hSeeddm642i2c;int portNumber;extern SA7121H_ConfParams sa7121hPAL45;extern SA7121H_ConfPar
33、ams sa7121hNTSC45;Uint8 vFromat = 0;Uint8 misc_ctrl = 0x6D;Uint8 output_format = 0x47;/ 地址为0 for cvbs port1,选择复合信号做为输入Uint8 input_sel = 0x00;/*地址为0xf,将Pin27设置成为CAPEN功能*/Uint8 pin_cfg = 0x02;/*地址为1B*/Uint8 chro_ctrl_2 = 0x14;/*图像句柄的声明*/VP_Handle vpHchannel0;VP_Handle vpHchannel1;VP_Handle vpHchannel2
34、;/*确定图像的参数*/int numPixels = 720;/每行720个像素int numLines = 576;/每帧576行(PAL)double a=0;double b=0;int c=0;int d=0;int e=0;int f=0;double g=0;int h=0;void NAME(int init_lie, int init_hang,int wenzi);/*采集与显示缓冲区的首址*/Uint32 capYbuffer = 0x80000000;Uint32 capCbbuffer = 0x800675c0;Uint32 capCrbuffer = 0x8009b
35、0a0;Uint32 disYbuffer = 0x80100000;Uint32 disCbbuffer = 0x801675c0; Uint32 disCrbuffer = 0x8019b0a0;Uint32 tmpYbuffer = 0x80200000;Uint32 tmpCbbuffer = 0x802675c0; Uint32 tmpCrbuffer = 0x8029b0a0;/*图像格式标志*/Uint8 NTSCorPAL = 0;extern far void vectors();extern volatile Uint32 capNewFrame;extern volati
36、le Uint32 disNewFrame;/*此程序可将四个采集口的数据经过Video Port0送出*/void main()Uint8 addrI2C;int i,j;int pixelnum,curnum;int begX,endX,begY,endY;/*-*/* perform all initializations */*-*/*Initialise CSL,初始化CSL库*/CSL_init();CHIP_config(&SEEDDM642percfg);/*-*/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间 注,DM642支持的是EMIFA,而
37、非EMIF*/EMIFA_config(&Seeddm642ConfigA);/*-*/*中断向量表的初始化*/Point to the IRQ vector table IRQ_setVecs(vectors); IRQ_nmiEnable(); IRQ_globalEnable(); IRQ_map(IRQ_EVT_VINT1, 11); IRQ_map(IRQ_EVT_VINT0, 12); IRQ_reset(IRQ_EVT_VINT1); IRQ_reset(IRQ_EVT_VINT1); /*打开一个数据拷贝的数据通路*/ DAT_open(DAT_CHAANY, DAT_
38、PRI_LOW, DAT_OPEN_2D);/*-*/*进行IIC的初始化*/hSeeddm642i2c = I2C_open(I2C_PORT0,I2C_OPEN_RESET);I2C_config(hSeeddm642i2c,&SEEDDM642IIC_Config);/*-*/*进行TVP5150pbs的初始化*/*选择TVP5150,设置第三通路*/GPIO_RSET(GPGC,0x0);/*将GPIO0不鑫狦PINT使用*/GPIO_RSET(GPDIR,0x1);/*将GPIO0做为输出*/GPIO_RSET(GPVAL,0x0);/*GPIO0输出为高,选择IIC1总线,
39、配置第二路,即为U21*/addrI2C = 0xBA >>1; _IIC_write(hSeeddm642i2c, addrI2C,0x00, input_sel); _IIC_write(hSeeddm642i2c, addrI2C,0x03, misc_ctrl); _IIC_write(hSeeddm642i2c, addrI2C,0x0D, output_format); _IIC_write(hSeeddm642i2c, addrI2C,0x0F, pin_cfg); _IIC_write(hSeeddm642i2c, addrI2C,0x1B, chro_ctrl_2
40、); /*回读当前摄像设备的格式*/ _IIC_read(hSeeddm642i2c, addrI2C,0x8c, &vFromat); vFromat = vFromat & 0xff;switch (vFromat)case TVP51XX_NTSCM:case TVP51XX_NTSC443:NTSCorPAL = 1;/*系统为NTSC的模式*/break;case TVP51XX_PALM:NTSCorPAL = 0;/*系统为PAL的模式*/break;default:NTSCorPAL = 2;/*系统为不支持的模式*/break;if(NTSCorPAL =2)
41、/*系统不支持的模式,重新配置*/for(;) /*-*/*进行SAA7121H的初始化*/GPIO_RSET(GPVAL,0x1);/*GPIO0输出为低,选择IIC1总线,配置图像输出*/ addrI2C = 0xB8 >>1; /*选择第0路的I2C的地址*/*将第0路的视频输入口的数据口设为高阻状态, 使能SCLK,将第27脚设为输入*/_IIC_write(hSeeddm642i2c, addrI2C,0x03, 0x1);/*配置SAA7121H*/GPIO_RSET(GPVAL,0x1);/*GPIO0输出为低,选择IIC1总线,配置图像输出*/*初始化Video P
42、ort0*/*将Vedio Port1设为encoder输出*/portNumber = 0;vpHchannel0 = bt656_8bit_ncfd(portNumber);for(i = 0; i < 100000; i +);SEEDDM642_rset(SEEDDM642_WDOGEN,2);addrI2C = 0x88 >>1; for(i =0; i<43; i+)if(NTSCorPAL = 1)_IIC_write(hSeeddm642i2c, addrI2C, (sa7121hNTSCi.regsubaddr), (sa7121hNTSCi.regv
43、ule);else_IIC_write(hSeeddm642i2c, addrI2C, (sa7121hPALi.regsubaddr), (sa7121hPALi.regvule);/*-*/*初始化Video Port1*/*将Vedio Port1设为采集输入*/portNumber = 1;vpHchannel1 = bt656_8bit_ncfc(portNumber);bt656_capture_start(vpHchannel1);/*等待第一帧数据采集完成*/while(capNewFrame = 0)/*将数据存入显示缓冲区,并清采集完成的标志*/capNewFrame =0
44、;/*启动显示模块*/bt656_display_start(vpHchannel0);j=0;/*建立显示的实时循环*/for(;)/*当采集区的数据已经采集好,而显示缓冲区的数据已空*/if(capNewFrame = 1)&&(disNewFrame = 1)/*将数据装入显示缓冲区,并清采集完成的标志*/capNewFrame =0;disNewFrame =0;for(i=0;i<numLines;i+)/*传送Y缓冲区*/DAT_copy(void *)(capYbuffer + i * numPixels), (void *)(tmpYbuffer + i
45、* numPixels),numPixels);/*传送Cb缓冲区*/DAT_copy(void *)(capCbbuffer + i * (numPixels >> 1), (void *)(tmpCbbuffer + i * (numPixels >> 1),numPixels>>1);/*传送Cr缓冲区*/DAT_copy(void *)(capCrbuffer + i * (numPixels >> 1), (void *)(tmpCrbuffer + i * (numPixels >> 1),numPixels>>1); /*肤色过滤*/根据 Cb、Cr 值,将tmpYbuffer的Y值分为两部分for(i=0;i<numLines*numPixels/4;i+)/0x32a00/2 if(*(Uint8 *)(tmpCbbuffer+i)>77) && (*(Uint8 *)(tmpCbbuffer+i)<177) &&(*(Uint8 *)(tmpCrbuffer+i)>133)&&(*(Uint8 *)(tmpCrbuffer+i)<156) (*(Uint8 *)(tmpYbuffer+i*2)=0xff;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 统一大市场公平竞未来公平竞争政策宣传周
- 2026春节假期安全教育班会教学课件
- 湿法石灰石烟气脱硫技术
- 高铁客运管理安全培训课件
- 铁路安全培训真实案例课件
- 未来五年游学企业数字化转型与智慧升级战略分析研究报告
- 未来五年墙体广告市场需求变化趋势与商业创新机遇分析研究报告
- 未来五年城市经营行业市场营销创新战略制定与实施分析研究报告
- 未来五年生产活动寄递服务企业县域市场拓展与下沉战略分析研究报告
- 铁路安全培训会讲话稿件课件
- 4S店续保专员工作总结
- 2026思南农业发展集团有限责任公司招聘参考考试题库及答案解析
- 技术开发合同(芯片2025年设计)
- 【初中 数学】整数指数幂课件 2025-2026学年人教版八年级数学上册
- 2026年精神科护理工作计划
- 2024-2025学年广东省广州市荔湾区七年级(上)期末英语试卷(含答案)
- 化疗药物安全操作规程
- 2026年中考数学专题复习:一次函数综合 大题压轴练习题(含答案)
- 康复护理学:功能训练与辅助器具使用
- 医疗质量管理的风险预警系统构建策略研究报告
- 2、公安检查站治安管控系统解决方案
评论
0/150
提交评论