第6章集成开发环境CCS的使用2176.4.3图像数据转换与CCS图像显示实验本节以利用CCS实现图像显示为例,进一步学习CCS的图形显示(Graph)调试技术,同时提供图像数据的转换方法。为了方便起见,本实验将6.4.2中的volume目录下的文件稍加修改。目标板仍为TMS320C64xxSimulator。1.修改volume目录下的工程文件假定CCS安装在C:\CCStudio_v3.3目录下。(1)将C:\CCStudio_v3.3\tutorial\sim64xx\volume1文件夹拷贝到文件夹C:\CCStudio_v3.3\MyProjects下。(2)运行CCS,并打开工程volume.pjt。(3)将C:\CCStudio_v3.3\C6000\cgtools\lib中C64xDSP的C语言运行支持库文件rts6400.lib添加到工程中。(4)右击工程观察窗中volume.pjt图标,在弹出的菜单中点击“ScanAllFileDependencies”命令,CCS将volume.h自动添加到volume工程中。(5)修改volume.c文件。打开volume.c文件,在“externvoidload(unsignedintloadValue);”上一行添加如下一段代码,定义图像存储空间。#pragmaDATA_ALIGN(image,8)//图像每个像素数据以8字节对齐#pragmaDATA_SECTION(image,.imgbuffer)//为数组image分配一个段,段名为imgbufferunsignedcharimage[SIZE]={};//SIZE大小是图像的像素个数(6)修改volume.cmd文件。打开volume.cmd,将其内容作如下修改:/*cmd文件*/MEMORY{L2:o=00010000hl=000F0000hCE0:o=80000000hl=01000000h/*存放图像数据image起始地址和长度*/}SECTIONS{.cinitCE0.textL2.stackL2.bssL2.constL2.dataL2第6章集成开发环境CCS的使用218.farL2.switchL2.sysmemL2.tablesL2.cioL2.imgbufferCE0/*存放图像数据image,将image数据存放到DSP外部RAM中,即CE0,存放起始地址为80000000h*/}2.图像数据转换图像的数据格式和DSP工程中的数据格式是不同的,因此若要在CCS中使用这些图像数据,则必须进行转换。可以利用高级语言,如Matlab或C语言将一副图像的数据提取出来,转换成DSP可用的数据。以下bmp2data1.m是Matlab图像数据提取和转换程序。%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%bmp2data1.m%利用MATLAB将灰度或索引图像转换为十六进制数据文件Clear;clc;[filename,filepath]=uigetfile('C:\ProgramFiles\MATLAB\R2007a\work\*.bmp','OpenBmpfile');%为打开bmp图像而打开一个标准对话框[X,map]=imread([filepath,filename]);%将bmp文件数据读到X中imshow(X,map);%在Matlab中显示图像X1=X';%X转秩,考虑到reshape函数转换数据的顺序,在调用reshape之前进行数据调整。Y=reshape(X1,1,[]);%数组维数转换fid=fopen('C:\ProgramFiles\MATLAB\R2007a\work\CCSbmpdata.txt','w');%打开一个数据文件,存放待写数据。L=length(Y);form=1:Lfprintf(fid,'0x%s,',dec2hex(Y(m)));%向CCSbmpdata.txt中写入Y的十六进制数据endfclose(fid);%关闭fid标识的文件%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%在Matlab下运行程序bmp2data1.m,将256x256图像文件lena.bmp进行转换,生成十六进制图像数据文件CCSbmpdata.txt,数据如下。0x8A,0x85,0x81,0x83,0x83,0x83,0x81,0x81,0x82,0x83,0x81,0x80,0x83,0x83,0x81,…….第6章集成开发环境CCS的使用219数据存放的是图像的各个像素,数据的个数等于图像的像素个数。以256x256图像文件lena.bmp为例,SIZE=256x256=65536。将CCSbmpdata.dat所有数据拷贝出来,给volume.c中的“unsignedcharimage[SIZE]={};”赋值(注意将CCSbmpdata.txt数据中的昀后一个“,”去掉),并将SIZE替换为65536。3.CCS图像观察窗CCS图形观察窗包括显示数据的多种选择,用户可以使用图像图标(imagegraph)在CCS下查看图像处理的效果。在“View”菜单中选择“Graph”下的“image”命令,打开图形属性对话框,查看图像属性对话框。如图6-36所示。图6-36色彩空间为YUV时的图形属性对话框如果定义正确,采集缓冲区和显示缓冲区中将含有完整的图像。当图像更新时,采集缓冲区从目标板中提取数据,显示缓冲区被采集缓冲区中的数据所覆盖。色彩空间(ColorSpace)定义显示数据的方式,即YUV和RGB两种方式。当色彩空间为YUV时,图形属性对话框窗为图6-36所示。“YUVRatio”选项定义Y、U和V样点(sample)之间的关系,一般有3种选择,即4:1:1(每4个水平Y样点,1个U样点和1个V样点)、4:2:2(每2个水平Y样点,1个U样点和1个V样点)和4:2:0(每2x2水平Y样点,1个U样点和1个V样点)。每个Y、U和V样点都使用8位表示,此下有3个域,即Y源起始地址(StartAddress-YSource)、U源起始地址(StartAddress-USource)和V源起始地址(StartAddress-VSource)。另外还有YUV值转换域(TransformationofYUVValues),将YUV转换为RGB。转换有两个步骤,即先将YUV为Y’U’V’,然后再从Y’U’V’转换为RGB。YUV值转换域有两个选择,“Unity(none)”(即使用单位矩阵将YUV转换Y’U’V’)和“ITU-RBT601(CCIR601)”(即使用CCIR601矩阵,按照ITU-RBT.601(早期为CCIR601)亮度将YUV转换为RGB)。当色彩空间为RGB时,图形对话框中隔行扫描数据源“InterleavedDataSources”选项选择为Yes或No,表明图像是否隔行扫描。如果选择No,则图形属性对话框如图6-37(a)所示。当选择Yes时,下方将出现“StartAddress”、“BitsPerPixel”、“ImageRGBOrder”选项。“StartAddress”(起始地址)代表一个具有三个隔行扫描源的缓冲器输入,这个缓冲区的隔行为1,如R0G0B0R1G1B1...序列代表RGB分量的流为像素0,接着是像素1。如图6-37(b)所示。第6章集成开发环境CCS的使用220(a)图像不隔行扫描(b)图像隔行扫描图6-37色彩空间为RGB时图形属性对话框“BitsPerPixel”(每个像素的位数)可选位数有“8(256ColorPalette)”(256色彩调色板,每个像素有8位值,指向调色板)、“16(6BitsforGreen)”(每个像素是2个字节的数值,其中红色5位,绿色6位,蓝色5位)、“24”(每个像素由3个字节数值,各有8位分别表示红色、绿色和蓝色)和“32”。如果此域选择16、24或32的话,还会出现“ImageRGBOrder”选项,定义红黄蓝的顺序。如果选择“8(256ColorPalette)”,还会出现“PaletteOption”选项,此选项定义了从8位像素值(paletteindex)到RGB色彩值的转换,可选项为“UniformPaletteof256Colors”、“GrayScaleof256Colors”和“UserDefined(256Colors)”。如果选择“UserDefined(256Colors)”,还会出项4个选项,即“PaletteAddress”、“PaletteEntry4-ByteAligned”、“PaletteEntryRGBOrder”和“ReadPaletteOnceOnly”。色彩空间为RGB时,图形对话框中的隔行扫描数据源“InterleavedDataSources”选择为“No”时,每个像素的R、G和B各个分量是为8位宽度,各个分量的值范围是0~255。选择“No”,则还有三个图形属性选项,即“StartAddress-RSource”、“StartAddress-GSource”和“StartAddress-BSource”。此外,图形属性对话框中还有一些选项,如“LinesPerDisplay”定义了像素高度。“PixelsPerLine”定义了像素宽度。“BytePackingtoFill32Bits”定义了目标板或simulator数据的图像压缩格式。如果选择“No”,表示字节类型的数据流不压缩,目标板或simulator中的每个数据值是字节类型的。如果选择“Yes”,表示字节类型的数据流压缩,每四个字节一组形成数据包。数据包是32位无符号整型数,数据值的低字节是数据包的第一个字节。如果选择“Yes”,还会有“ImageRow4-ByteAligned”选项,若此选项选择“Yes”,目标板或simulator的每个图像行是4字节对齐,选择“No”表示不对齐。数据值可能包含一行的尾和下一行的头这样的数据样本。“ImageOrigin”选项定义了图形窗中的图像原点,有四个选项,即“BottomLeft”、“TopLeft”、“TopRight”和“BottomRight”。4.观察图像第6章集成开发环境CCS的使用221本节实验经修改完成后,单击CCS的“Project”菜单中的“RebuildAll”,或按工具栏中按钮,编译程序并连接。如果编译连接无误,CCS将生成DSP可执行文件volume.out。按“File”下的“loadprogram…”,将volume.out文件下载到DSP中。选择“Debug”菜单下“Run”,或汇编工具栏中的图标即可启动目标DSP上的程序运行。程序运行后,利用CCS调试工具可以在CCS下观察图像。在“View”菜单中选择“Graph”下的“image”命令,打开图形属性对话框,如图6-38所示。将对话框中图形名称“GraphTitle”栏键入“lena”,“ColorSpace”栏选择“RGB”,“InterleavedDataDataSources”栏选择“No”,“StartAddress-RSource”栏、“StartAddress-GSource”栏和“StartAddress-BSource”栏均键入存放图像存储区的首地址“image”,“LinesPerDisplay”栏和“PixelsPerLine”栏均键入256(图像大小为256x256)。图6-38图像lena显示属性对话框图形属性对话框填写完成,按“OK”按钮确定后,出现image的图像显示。如图6-39所示。第6章集成开发环境CCS的使用222图6-39图像lena在CCS中显示CCS图像显示调试界面如图6-40所示。图6-40CCS图像显示调试界面5.其它图像数据转