+RGB转灰度算法中图像数据的提取新方法
时间:10-02
整理:3721RD
点击:
在上一篇试用文档《【创龙TMS320C6748开发板试用】+RGB转灰度算法体验》里曾经提到过在选取图像的时候最好选比较小的图像,这样可以节省编译时间。为此,小编就借助CCS软件的加载数据功能将图像数据直接加载到DSP的DDR2里,这样就可以省去编译图片文件的时间。本文涉及到文本数据的一些简单的处理,小编就使用了VIM,当然也可以用其他的工具实现。具体过程如下:
以下操作均已前文生成的Image.c文件为基础。主要思路是将Image.c文件中的数组内容改变成符合CCS识别的.dat格式。
1.将数组中的所有“,”替换为换行(回车符),使用Vim编辑器打开Image.c,按几下 ESC 进入 Normal 模式,输入以下命令::%s/,/\r/g。回车后得到的效果如下:
此时由于数组之前有回车/换行符,所以会有空行出现,再执行:g/^$/d,即可删除所有空行。
2.添加数据头信息
将文件的头部改为:1651 9 c0000000 0 7FDC c 并另存为Image.dat。修改后的文件头部如图所示:
此格式是参照了CCS将内存数据输出为dat格式的文件内容。以上内容需要修改文件的大小,我选的图片是202x54,生成的数组大小是32732十六进制即7FDC。
3.导入数据到DDR2
将工程中Image.h文件移除,所以需要在main.c文件中重新定义数组Image。我们还将数组定义在DDR2中,代码如下:
- #pragma DATA_SECTION( Image,".image");
- unsigned char Image[32732];
其中.image是在CMD文件中定义的数据段。CMD文件需要定义如下:
- /*存储图像*/
- .image > DDR2
修改主函数中图像的大小,主函数代码如下:
- /****************************************************************************/
- /* */
- /* 主函数 */
- /* */
- /****************************************************************************/
- int main(void)
- {
- // 使能缓存 L1 及 L2
- CacheEnableMAR((unsigned int)0xC0001000, (unsigned int)0x08000000);
- CacheEnable(L1DCFG_L1DMODE_32K | L1PCFG_L1PMODE_32K | L2CFG_L2MODE_256K);
- // 转换 RGB24 图片为灰度图
- // 前 8 个字节是图片信息
- RGB2Gray(32724, Image +8, Gray);
- // 断点
- SW_BREAKPOINT;
- }
修改完毕,重新编译并进入仿真界面。
在CCS软件的内存查看窗口点击“LoadMemory”,(下图中红色框标注有误)开始加载数据。
设置格式地址如下:
找到刚才保存的Image.dat文件,然后点击Next:
输入加载的地址和数据长度,其中加载地址如图右边所示。点击Finish完成加载。
运行程序,并打开图像分析窗口即可查看图像,与上文操作一致,此处不再赘述!
小结
本文主要讲述了加载数据到DSP的DDR2的一种方法,此方法可以省去工程编译的一些时间,另外TL的烧写镜像,NandFlash的烧写貌似也采用了类似的思路。俗话说工欲善其事必先利其器,诸如Vim这样的工具熟练掌握可以给工作带来很大方便。
【本文完!】
--------------------华---丽---的---分---割---线--------------------
声明:本文内容及观点为小编主观意识的产物,褒贬纯属个人意见,不存在黑谁捧谁,严格遵循试用规则。如有冒犯多多包涵,实在看不下去可以私信沟通,不要让法院给俺寄传票!^_^