DM642学习笔记程序注释Word文档下载推荐.docx

上传人:b****5 文档编号:17080208 上传时间:2022-11-28 格式:DOCX 页数:15 大小:19.74KB
下载 相关 举报
DM642学习笔记程序注释Word文档下载推荐.docx_第1页
第1页 / 共15页
DM642学习笔记程序注释Word文档下载推荐.docx_第2页
第2页 / 共15页
DM642学习笔记程序注释Word文档下载推荐.docx_第3页
第3页 / 共15页
DM642学习笔记程序注释Word文档下载推荐.docx_第4页
第4页 / 共15页
DM642学习笔记程序注释Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

DM642学习笔记程序注释Word文档下载推荐.docx

《DM642学习笔记程序注释Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DM642学习笔记程序注释Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

DM642学习笔记程序注释Word文档下载推荐.docx

#include"

colorbar.h"

//如果显示彩色滚动条,就必须有此头文件;

否则不需要

evmdm642_vcapparams.h"

evmdm642_vdisparams.h"

/*heapIDsdefinedintheBIOSconfigurationfile*/

externIntEXTERNALHEAP;

//Ô

Ú

DSP/BIOSÖ

Ð

Ò

Ñ

¨

å

*========main========

main()

{

/******************************************************/

/*openCSLDATmoduleforfastcopy*/

CSL_init();

//调用任何CSL库中的函数,必须先在此调用函数

CACHE_clean(CACHE_L2ALL,0,0);

//清洗Cache模式

CACHE_setL2Mode(CACHE_256KCACHE);

//设置Cache模式

CACHE_enableCaching(CACHE_EMIFA_CE00);

//使能EMIFACE0空间

CACHE_enableCaching(CACHE_EMIFA_CE01);

//使能EMIFACE1空间

DAT_open(DAT_CHAANY,DAT_PRI_LOW,DAT_OPEN_2D);

//打开数据传输

}

*========tskVideoLoopback========

*videoloopbackfunction.

voidtskVideoLoopback()

Inti;

intm_nWork;

Intstatus;

FVID_HandledisChan;

//设置设备句柄

Intframes=0;

FVID_Frame*disFrameBuf;

IntnumLinesDis=EVMDM642_vDisParamsChan.imgVSizeFld1;

//设置显示的行数,VGA为480,PAL为576

IntnumLinesCap=EVMDM642_vCapParamsChan.fldYStop1-//设置采集行数

EVMDM642_vCapParamsChan.fldYStrt1+1;

/*判断是显示区域大,还是采集区域大,取其小者*/

IntnumLines=(numLinesDis>

numLinesCap)?

numLinesCap:

numLinesDis;

#ifdef_LOOPBACK

FVID_HandlecapChan;

/*设置每行显示的像素数,PAL制为720*/

IntnumPixels=EVMDM642_vCapParamsChan.fldXStop1-

EVMDM642_vCapParamsChan.fldXStrt1+1;

FVID_Frame*capFrameBuf;

/*设置采集图像一行的总像素*/

IntcapLinePitch=EVMDM642_vCapParamsChan.fldXStop1-

/*设置显示图像一行的总像素*/

IntdisLinePitch=EVMDM642_vDisParamsChan.imgHSizeFld1;

#ifdef_PIP

VPORTCAP_ParamsEVMDM642_vCapParamsChan2=EVMDM642_vCapParamsChan;

FVID_HandlecapChan2;

FVID_Frame*capFrameBuf2;

IntyPitch=capLinePitch>

>

1;

IntcPitch=((capLinePitch>

2)+7)&

(~7);

#endif

#endif

numLines*=2;

/*bothfields*/如果输出为PAL制,前面numLinesCap不要*2,这里再*2?

/*allocatebothcaptureanddisplayframebuffers*/

/*inexternalheapmemory*/

/*分配采集和显示图像的存放缓冲区*/

EVMDM642_vCapParamsChan.segId=EXTERNALHEAP;

EVMDM642_vDisParamsChan.segId=EXTERNALHEAP;

EVMDM642_vDisParamsSAA7105.hI2C=EVMDM642_I2C_hI2C;

EVMDM642_vCapParamsSAA7115.hI2C=EVMDM642_I2C_hI2C;

/*initializationofcapturedriver*/

/*建立并初始化采集设备对象*/

capChan=FVID_create("

/VP0CAPTURE/A/0"

IOM_INPUT,&

status,(Ptr)&

EVMDM642_vCapParamsChan,NULL);

EVMDM642_vCapParamsChan2.scale=VPORT_SCALING_ENABLE;

EVMDM642_vCapParamsChan2.fldOp=VPORT_FLDOP_FLD1;

EVMDM642_vCapParamsChan2.thrld>

=1;

capChan2=FVID_create("

/VP1CAPTURE/A/1"

EVMDM642_vCapParamsChan2,NULL);

/*initializationofdisplaydriver*/

/*建立并初始化显示设备对象*/

disChan=FVID_create("

/VP2DISPLAY"

IOM_OUTPUT,

&

EVMDM642_vDisParamsChan,NULL);

/*configurevideoencoder&

decoder*/

for(m_nWork=0;

m_nWork<

6;

m_nWork++)//这里的循环有何用?

一直没有弄清楚

{

/*为保证采集和显示设备正常工作,为其设置驱动*/

FVID_control(disChan,VPORT_CMD_EDC_BASE+EDC_CONFIG,

(Ptr)&

EVMDM642_vDisParamsSAA7105);

FVID_control(capChan,VPORT_CMD_EDC_BASE+EDC_CONFIG,

EVMDM642_vCapParamsSAA7115);

EVMDM642_vCapParamsSAA7115.aFmt=SAA7115_AFMT_COMPOSITE;

FVID_control(capChan2,VPORT_CMD_EDC_BASE+EDC_CONFIG,

}

/*startcapture&

displayoperation*/

/*开始采集和显示操作*/

FVID_control(disChan,VPORT_CMD_START,NULL);

FVID_control(capChan,VPORT_CMD_START,NULL);

FVID_control(capChan2,VPORT_CMD_START,NULL);

/********************************************************/

/*requestaframebufferfromdisplay&

capturedriver*/

/*分配采集和显示一帧图像存放的缓冲区*/

FVID_alloc(disChan,&

disFrameBuf);

FVID_alloc(capChan,&

capFrameBuf);

FVID_alloc(capChan2,&

capFrameBuf2);

frames++;

while

(1){/*loopforever*/

/*copydatafromcapturebuffertodisplaybuffer*/

/***************************************************/

/*将采集缓冲区的内容复制到显示缓冲区*/

for(i=0;

i<

numLines;

i++){

DAT_copy(capFrameBuf->

frame.iFrm.y1+i*capLinePitch,

disFrameBuf->

frame.iFrm.y1+i*disLinePitch,

numPixels);

frame.iFrm.cb1+i*(capLinePitch>

1),

frame.iFrm.cb1+i*(disLinePitch>

1),

numPixels>

1);

frame.iFrm.cr1+i*(capLinePitch>

frame.iFrm.cr1+i*(disLinePitch>

#ifdef_PIP

(numLines>

DAT_copy(capFrameBuf2->

frame.iFrm.y1+i*yPitch,

frame.iFrm.y1+i*disLinePitch

+(disLinePitch>

(numPixels>

1));

frame.iFrm.cb1+i*cPitch,

1)

2),

(numPixels>

2));

frame.iFrm.cr1+i*cPitch,

+(disLinePitch>

2),

DAT_wait(DAT_XFRID_WAITALL);

FVID_exchange(capChan,&

//采集一帧图像

FVID_exchange(capChan2,&

#else//如果定义CAPTURE则填充图像缓冲区为8条带

fillFrmBuf(&

disFrameBuf->

frame.iFrm,EVMDM642_vDisParamsChan.imgHSizeFld1,

EVMDM642_vDisParamsChan.imgVSizeFld1

+EVMDM642_vDisParamsChan.imgVSizeFld2,

frames%360);

FVID_exchange(disChan,&

//将显示缓冲区中一帧图像送给显示设备

//处理下一帧图像

实验5.20视频图像处理-取反

1.将程序改成屏幕1/4进行取反,而其他不变

在主程序中ICETEKDM642PCIImageProcessReverse()函数前加if(i<

(numLines/2)),即:

if(i<

(numLines/2))

ICETEKDM642PCIImageProcessReverse();

并将ICETEKDM642PCIImageProcessReverse()函数中的循环体改为如下:

for(i=0;

i<

720/2;

i++)

nMemTemp[i]=~nMemTemp[i];

2.例程中处理了亮度信号,以下是处理色差信号:

for(i=0;

i++)

{

m_nID=DAT_copy(capFrameBuf->

frame.iFrm.cb1+i*(capLinePitch>

1),nMemTemp,numPixels>

DAT_wait(m_nID);

ICETEKDM642PCIImageProcessReverse();

DAT_copy(nMemTemp,disFrameBuf->

frame.iFrm.cb1+i*(disLinePitch>

1),numPixels>

for(m_nWork=0;

numPixels>

1;

m_nWork++)

nMemTemp[m_nWork]=0x080;

frame.iFrm.y1+i*disLinePitch,numPixels);

DAT_copy(nMemTemp,disFrameBuf->

frame.iFrm.cr1+i*(disLinePitch>

出现的问题:

图像显示时右半屏有闪烁?

~~~

实验5.21视频图像处理-直方图统计

程序注释:

源程序中定义的js变量不知为何用,于是就删除了~~~

ICETEK-DM642-PCI.h"

//工作变量

#pragmaDATA_SECTION(nMemTemp,"

.INTPROCBUFF"

);

#pragmaDATA_ALIGN(nMemTemp,128);

unsignedcharnMemTemp[720];

#pragmaDATA_SECTION(nHisto,"

#pragmaDATA_ALIGN(nHisto,128);

unsignedintnHisto[256];

unsignedcharimgHisto[HISTOHIGH*HISTOWIDTH];

//128*256

intmi,mj,m_nWork1;

unsignedintm_nWork,*pWork;

unsignedchar*pImg,*pImg1;

voidICETEKDM642PCIBoardInit()//直方图显示区域初始化

for(mi=0;

mi<

HISTOHIGH*HISTOWIDTH;

mi++)

imgHisto[mi]=1;

256;

nHisto[mi]=0;

#pragmaCODE_SECTION(ICETEKDM642PCIStatistic,"

.text1"

voidICETEKDM642PCIStatistic()//统计一帧图像的直方图

inti;

720;

nHisto[nMemTemp[i]]++;

#pragmaCODE_SECTION(ICETEKDM642PCIHistogram,"

voidICETEKDM642PCIHistogram()//将统计的一帧图像的直方图显示在显示区域上

m_nWork=0;

mi++)//找出各灰度级别像素总数最大的

if(m_nWork<

nHisto[mi])

m_nWork=nHisto[mi];

m_nWork/=(HISTOHIGH-1);

//求出比例因子(即像素总数最大值/显示区域的高度)

mi++)//转换各灰度级,将其映射到显示区域(即:

各个灰度级的像素/比例因子)

nHisto[mi]/=m_nWork;

mi++)//将显示区域置白

pImg=imgHisto;

//pImg指针指向显示区域首地址

pImg+=((HISTOHIGH-1)*HISTOWIDTH);

//mImg指针指向显示区域尾地址

pImg++;

//?

?

for(mi=1;

255;

mi++,pImg++)

for(mj=0,pImg1=pImg;

mj<

nHisto[mi];

mj++,pImg1-=HISTOWIDTH)

(*pImg1)=HISTOCOLOR;

//对应的显示区域填充颜色,这里还是不太明白

mi++)//清除直方图统计的数组

实验5.22视频图像处理-直方图均衡化增强

直方图均衡化,其实质是图像增强的一种。

math.h"

#pragmaDATA_SECTION(fHisto,"

#pragmaDATA_ALIGN(fHisto,128);

floatfHisto[256];

//

#pragmaDATA_SECTION(lut,"

#pragmaDATA_ALIGN(lut,128);

unsignedcharlut[256];

//保存新的灰度级,是通过上一帧图像计算的

unsignedintm_nWork,*pWork,js;

floatm_fWork;

voidICETEKDM642PCIBoardInit()

js

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1