完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
[tr]
人脸识别主程序: void main(void) { ...... while (1) { /* 等待复制捕获图像到image_buffer */ captured = 1; while(captured); GreyTran(image_buffer, gray_buffer); image->imageData = (char*)gray_buffer; storage = cvCreateMemStorage(0); /* 使用OpenCVhaardetect算法*/ dsp_sequence =cvHaarDetectObjects(image, cascade, storage, 2.5, 2, 0, cvSize(30, 30)); /* 复制人脸位置数据缓冲区,用于画人脸位置到每一帧图像 */ for (i = 0; i < 2; i++) *(dsp_sequence2 + i) = *(dsp_sequence +i); cvReleaseMemStorage(&storage); if (error_flag) { UARTprintf("Unexpected erroroccured during VPIF loopbackn"); error_flag = 0; } } } 在主循环while (1)中,当执行到while(captured);的时候程序执行死循环,等待VPIF中断服务程序。VPIF中断服务程序如下: char k=0; static void VPIFIsr(void) { unsigned int temp; IntEventClear(SYS_INT_VPIF_INT); temp = VPIFInterruptStatus(SOC_VPIF_0_REGS,VPIF_ERROR_INT | VPIF_FRAMEINT_CH3 | VPIF_FRAMEINT_CH2 | VPIF_FRAMEINT_CH1 | VPIF_FRAMEINT_CH0); if(k>=2) { VPIFCaptureChanenDisable(SOC_VPIF_0_REGS,VPIF_CHANNEL_1); VPIFCaptureChanenDisable(SOC_VPIF_0_REGS,VPIF_CHANNEL_0); CvRect *r; CvPoint c1, c2; unsigned int Blue = 0x001f; int i; if(captured == 1) { CacheWB((unsigned int)ov2640image,sizeof(ov2640image)); srcBuff = (char *)(ov2640image); dstBuff = (char *)image_buffer; EDMA3Test(); captured = 0; } else { for (i = 0; i < (dsp_sequence2 ?dsp_sequence2->total : 0); i++) { r = (CvRect *)cvGetSeqElem(dsp_sequence2, i); // mark with thick white rectangle c1.x = r->x; c1.y = r->y; c2.x = r->x + r->width; c2.y = r->y + r->height; RectDraw(ov2640image, c1.x, c1.y, c2.x,c2.y, Blue); } CacheWB((unsigned int)ov2640image,sizeof(ov2640image)); CacheInv((unsigned int)g_pucBuffer,sizeof(g_pucBuffer)); srcBuff = (char *)(ov2640image); dstBuff = (char*)(g_pucBuffer+PALETTE_OFFSET+PALETTE_SIZE); EDMA3Test(); } Reinitov2640(); k=0; /* 使能捕获 */ VPIFCaptureChanenEnable(SOC_VPIF_0_REGS,VPIF_CHANNEL_0); VPIFCaptureChanenEnable(SOC_VPIF_0_REGS,VPIF_CHANNEL_1); } k++; /* 中断错误 */ if ((temp & VPIF_ERROR_INT)) { error_flag = 1; } } 在VPIF中断服务程序中当程序执行完: if(captured == 1) { CacheWB((unsigned int)ov2640image,sizeof(ov2640image)); srcBuff = (char *)(ov2640image); dstBuff = (char *)image_buffer; EDMA3Test(); captured = 0; } 后captured = 0;主程序while(captured);死循环解除,主程序向下执行 进行灰度转换和人脸识别区域的处理。 我的问题是,在主程序向下执行 进行灰度转换和人脸识别区域的处理的时候,VPIF中断会不会发生,如果不会发生那么主程序在执行完之后又会执行 captured = 1; while(captured); 然后等待VPIF中断,在进入VPIF中断后因为captured= 1,所以是不是还是执行 if(captured == 1) { CacheWB((unsigned int)ov2640image,sizeof(ov2640image)); srcBuff = (char *)(ov2640image); dstBuff = (char *)image_buffer; EDMA3Test(); captured = 0; } 那么什么时候执行 else { for (i = 0; i < (dsp_sequence2 ?dsp_sequence2->total : 0); i++) { r = (CvRect *)cvGetSeqElem(dsp_sequence2, i); // mark with thick white rectangle c1.x = r->x; c1.y = r->y; c2.x = r->x + r->width; c2.y = r->y + r->height; RectDraw(ov2640image, c1.x, c1.y, c2.x,c2.y, Blue); } CacheWB((unsigned int)ov2640image,sizeof(ov2640image)); CacheInv((unsigned int)g_pucBuffer,sizeof(g_pucBuffer)); srcBuff = (char *)(ov2640image); dstBuff = (char*)(g_pucBuffer+PALETTE_OFFSET+PALETTE_SIZE); EDMA3Test(); } 这个语句,不执行这个语句怎么能在LCD上显示图像呢? 请帮忙解答,谢谢!!!!!! [/tr] |
|
相关推荐
4个回答
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
基于RK3588J的6路MIPI CSI视频采集案例分享,多路视频系统必看!
1211 浏览 0 评论
589 浏览 0 评论
【创龙科技TL570x-EVM开发板试用体验】 GStreamer 功能测评
8560 浏览 8 评论
【创龙科技TL570x-EVM开发板试用体验】创龙TL5708-EVM开发板入手使用体验评测
6575 浏览 0 评论
【创龙TLZ7x-EasyEVM评估板试用连载】+3.环境搭建vmware+ubuntu详细教程(二)
1397 浏览 0 评论
831浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板及核心板介绍
827浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板--板卡调试软件安装
846浏览 0评论
【创龙科技AM64x开发板试用体验】AM64x开发板开箱测评
835浏览 0评论
求助! 关于使用自制底板插入创龙IMX8MM 核心板无法启动问题
489浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 20:00 , Processed in 0.857234 second(s), Total 108, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号