6.4.3 图像数据转换与CCS图像显示实验
本节以利用CCS实现图像显示为例,进一步学习CCS的图形显示(Graph)调试技术,同时提供图像数据的转换方法。为了方便起见,本实验将6.4.2中的volume目录下的文件稍加修改。目标板仍为TMS320C64xx Simulator。
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中C64x DSP的C语言运行支持库文件rts6400.lib 添加到工程中。
(4)右击工程观察窗中volume.pjt图标,在弹出的菜单中点击“Scan All File Dependencies”命令,CCS将volume.h自动添加到volume工程中。
(5)修改volume.c文件。
打开volume.c文件,在“extern void load(unsigned int loadValue);”上一行添加如下一段代码,定义图像存储空间。
#pragma DATA_ALIGN(image, 8)  // 图像每个像素数据以8字节对齐
#pragma DATA_SECTION(image,".imgbuffer") //为数组image分配一个段,段名为imgbuffer
unsigned char image[SIZE] = { }; // SIZE大小是图像的像素个数
(6) 修改d文件。
打开d,将其内容作如下修改:
/*  cmd  文件*/
MEMORY
{
L2:  o =00010000h  l =000F0000h
CE0:  o =80000000h  l =01000000h  /*存放图像数据image起始地址和长度*/
}
SECTIONS
{
.cinit      >      CE0
.text      >      L2
.stack      >      L2
.bss        >      L2
.const>      L2
.data      >      L2
217
.
far        >      L2
.switch>      L2
.sysmem    >      L2
.tables    >      L2
.cio        >      L2
.imgbuffer >      CE0/*存放图像数据image,将image数据存放到DSP外部RAM中,即CE0, 存放起始地址为80000000h*/
}
2.图像数据转换
图像的数据格式和DSP工程中的数据格式是不同的,因此若要在CCS中使用这些图像数据,则必须进行转换。可以利用高级语言,如Matlab或C语言将一副图像的数据提取出来,转换成DSP可用的数据。
以下bmp2data1.m是Matlab图像数据提取和转换程序。%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%bmp2data1.m
%利用MATLAB将灰度或索引图像转换为十六进制数据文件
Clear;clc;
[filename,filepath]=uigetfile('C:\Program
Files\MATLAB\R2007a\work\*.bmp','Open Bmp file');%为打开bmp图像而打开一个标准对话框
[X,map]= imread([filepath,filename]);%将bmp文件数据读到X中
imshow(X,map);%在Matlab中显示图像
X1=X';%X转秩,考虑到reshape函数转换数据的顺序,在调用reshape之前进行数据调整。
Y=reshape(X1,1,[]);%数组维数转换
fid=fopen('C:\Program
Files\MATLAB\R2007a\','w');%打开一个数据文件,存放待写数据。
L=length(Y);
for m=1:L
fprintf(fid,'0x%s,',dec2hex(Y(m))); %向中写入Y的十六进制数据
end
c语言开发环境有哪些
fclose(fid); %关闭fid标识的文件%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%在Matlab下运行程序bmp2data1.m,将256x256图像文件lena.bmp进行转换,生成十六进制图像数据文件,数据如下。
0x8A,0x85,0x81,0x83,0x83,0x83,0x81,0x81,0x82,0x83,0x81,0 x80,0x83,0x83,0x81, …….
218
数据存放的是图像的各个像素,数据的个数等于图像的像素个数。以256x256图像文件lena.bmp为例,SIZE=256x256=65536。
将CCSbmpdata.dat所有数据拷贝出来,给volume.c中的“unsigned char image[SIZE] = { };”赋值(注意将数据中的最后一个“,”去掉),并将SIZE替换为65536。3.CCS图像观察窗
CCS图形观察窗包括显示数据的多种选择,用户可以使用图像图标(image graph)在CCS下查看图像处理的效果。在“View”菜单中选择“Graph”下的“image”命令,打开图形属性对话框,查看图像属性对话框。如图6-36所示。
图6-36 彩空间为YUV时的图形属性对话框
如果定义正确,采集缓冲区和显示缓冲区中将含有完整的图像。当图像更新时,采集缓冲区从目标板中提取数据,显示缓冲区被采集缓冲区中的数据所覆盖。
彩空间(Color Space)定义显示数据的方式,即YUV和RGB两种方式。
当彩空间为YUV时,图形属性对话框窗为图6-36所示。“YUV Ratio”选项定义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源起始地址(Start Address-Y Source)、U源起始地址(Start Address-U Source)和V源起始地址(Start Address-V Source)。另外还有YUV值转换域(Transformation of YUV Values),将YUV转换为RGB。转换有两个步骤,即先将YUV为Y’U’V’,然后再从Y’U’V’转换为RGB。YUV值转换域有两个选择,“Unity(none)”(即使用单位矩阵将YUV转换Y’U’V’)和“ITU-R BT 601 (CCIR601)”(即使用CCIR601矩阵,按照ITU-R BT.601 (早期为CCIR 601)亮度将YUV转换为RGB)。
当彩空间为RGB时,图形对话框中隔行扫描数据源“Interleaved Data Sources”选项选择为Yes或No,表明图像是否隔行扫描。如果选择No,则图形属性对话框如图6-37(a)所示。当选择Yes时,下方将出现“Start Address”、“Bits Per Pixel”、“Image RGB Order”选项。“Start Address”(起始地址)代表一个具有
三个隔行扫描源的缓冲器输入,这个缓冲区的隔行为1,如R0G0B0R1G1B1 ...序列代表RGB分量的流为像素0,接着是像素1。如图6-37(b)所示。
219
220
(a)图像不隔行扫描(b)图像隔行扫描
图6-37 彩空间为RGB时图形属性对话框
“Bits Per Pixel”(每个像素的位数)可选位数有“8 (256 Color Palette)”(256彩调板,每个像素有8位值,指向调板)、“16 (6 Bits for Green)”(每个像素是2个字节的数值,其中红5位,绿6位,蓝5
位)、“24”(每个像素由3个字节数值,各有8位分别表示红、绿和蓝)和“32”。如果此域选择16、24或32的话,还会出现“Image RGB Order”选项,定义红黄蓝的顺序。如果选择“8 (256 Color Palette)”,还会出现“Palette Option”选项,此选项定义了从8位像素值(palette index)到RGB彩值的转换,可选项为“Uniform Palette of 256 Colors”、“Gray Scale of 256 Colors”和“User Defined (256 Colors)”。如果选择“User Defined (256 Colors)”,还会出项4个选项,即“Palette Address”、“Palette Entry 4-Byte Aligned”、“Palette Entry RGB Order”和“Read Palette Once Only”。
彩空间为RGB时,图形对话框中的隔行扫描数据源“Interleaved Data Sources”选择为“No”时,每个像素的R、G和B各个分量是为8位宽度,各个分量的值范围是0~255。选择“No”,则还有三个图形属性选项,即“Start Address - R Source”、“Start Address - G Source”和“Start Address - B Source”。
此外,图形属性对话框中还有一些选项,如“Lines Per Display”定义了像素高度。“Pixels Per Line”定义了像素宽度。“Byte Packing to Fill 32 Bits”定义了目标板或simulator数据的图像压缩格式。如果选择“No”,表示字节类型的数据流不压缩,目标板或simulator中的每个数据值是字节类型的。如果选择“Yes”,表示字节类型的数据流压缩,每四个字节一组形成数据包。数据包是32位无符号整型数,数据值的低字节是数据包的第一个字节。如果选择“Yes”,还会有“Image Row 4-Byte Aligned”选项,若此选项选择“Yes”,目标板或simulator的每个图像行是4字节对齐,选择“No”表示不对齐。数据值可能包含一行的尾和下一行的头这样的数据样本。
“Image Origin”选项定义了图形窗中的图像原点,有四个选项,即“Bottom Left”、“Top Left”、“Top Right”和“Bottom Right”。
4.观察图像
本节实验经修改完成后,单击CCS的“Project”菜单中的“Rebuild All”,或按工具栏中按钮,编译程序并连接。如果编译连接无误,CCS将生成DSP可执行文件volume.out。
按“File”下的“load program…”,将volume.out文件下载到DSP中。选择“Debug”菜单下“Run”,或汇编工具栏中的图标即可启动目标DSP上的程序运行。程序运行后,利用CCS调试工具可以在CCS下观察图像。
在“View”菜单中选择“Graph”下的“image”命令,打开图形属性对话框,如图6-38所示。将对话框中图形名称“Graph Title”栏键入“lena”,“Color Space”栏选择“RGB”,“Interleaved Data Data Sources”栏选择“No”,“Start Address-R Source”栏、“Start Address-G Source”栏和“Start Address-B Source”栏均键入存放图像存储区的首地址“image”,“Lines Per Display”栏和“Pixels Per Line”栏均键入256(图像大小为256x256)。
图6-38 图像lena显示属性对话框
图形属性对话框填写完成,按“OK”按钮确定后,出现image的图像显示。如图6-39所示。
221

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。