dsp下7501毛瓷如何转换成2

本文为原创作品,转载请注明出处
欢迎关注我的博客:和/xujianqing/
这篇博客主要是要讲怎么把一张图片存成一个二进制的文件,直接存到DSP中来做处理,而不用考虑DSP与图像采集模块,或者上位机之间的数据通信使得我们更加专注于算法的开发研究和处理功能的实现。
这是最近在做的一样工作,主要开发对雷达图像处理的目标检测算法。思路是先把现成的雷达图片转化为一个数组,然后以头文件的形式包含到程序中。用来验证算法和计算速度。DSP采用TI公司的6000系列单核处理器,6748。(背景交代完毕,可以忽略)。
开胃小菜---MATLAB
size()函数 imread()函数
在matlab中,对于size函数,其返回值为:
[ROW,COL] = size(A),
A = [0, 1 ,2; 0, 1, 2];
此处A为两行三列的矩阵
在读取一张图片之后,(此处默认为灰度图)返回一个矩阵,行数和列数则分别对应于图像的高度和宽度,
str1 = 'C:\Users\yezi\Desktop\dsp处理\';
str2 = '111.bmp';
str3 = strcat(str1,str2);
image = imread(str3);
在matlab中读一张在指定路径下的图片,matlab已经提供了一个imread()函数,它返回数字图片每一点像素的灰度值,存成一个矩阵image。
行数——高度
列数——宽度
图片高度宽度怎么看?
在图片上【右键】—【属性】—【详细信息】
在Opencv中同样提供一个imread函数,读取一个图片,并存为一个Mat类的对象。也是包含一个图像矩阵,行数列数与matlab是一样的。
把图片存成一个一维数组,然后在DSP中要把它恢复成一个二维矩阵,于是行数列数就显得相当重要。正是对这个函数的理解,解决了我在DSP中读取图片时把行数,列数搞混后出现错误,先记住它。
DSP6748读取图片相关介绍
在对DSP6748进行图像处理算法开发时,你可以利用fopen(),fread()函数,在CCS集成开发环境下,直接读取上位机中指定路径下的文件,但是这必须是在Debug模式下,通过仿真器进行链接才能实现。
在仿真模式下,通过仿真器读取上位机中的一张图片,需要耗费很长时间。因此为了算法调试的速度和需要,我把图片转化为一个头文件包含到程序中,这也是通常的做法。
图片转换为字符数组形式
TI提供的转换工具
TI公司提供了一个转换的小工具,在C6748_StarterWare包中,具体路径为:..\C6748_StarterWare_1_20_04_01\tools\bmp2c
具体用法:
把要转化的图片拷贝到该工具tools\bmp2c目录下
在该目录下,按住shift按键,鼠标右键—【在此处打开命令窗口】
输入命令:bmp2c -8 InPutName.bmp OutPutName.c
自动生成字符数组文件 OutPutName.c
转换窗口:
转换出来的文件:
看着好像很方便,但是好事总是多磨,不幸的是这个工具只是支持24位深度和16位深度的图片,而我所需要的却是要把一幅8位的图片,就是灰度图转化为字符数组文件,于是自己动手丰衣足食:
我的转换工具
再上我编写的matlab的代码:
%%读入灰度图像,转化为二进制文件
读入需要转化的图片,图片和文件一个路径下打开一个文件写入数据
转换之后的头文件:
至此转换完成。
把该头文件包含到CCS工程中,就可以直接对图片进行处理了。
在CCS中的主函数测试代码:
void main()
for(i = 0; i & i++)
for (j = 0; j & ++j)
BA[i][j] = image[i * width + j];
BA为把该图片一维数组重新转为二维数组。要注意其中height为行数,width为列数
正如上图所示,把width和height分清楚了,再把一维数组转化为二维数组就不会错。这时候用到我开头讲到的那个注意事项。
好了本文到此结束!欢迎有兴趣的朋友一起交流,批评指正!希望我的思路能给你带来一些灵感!
阅读(...) 评论()您所在的位置: &
DSP指令和指令周期
DSP指令和指令周期
岂兴明/胡小冬/周火金
人民邮电出版社
《DSP嵌入式开发入门与典型实例》第2章DSP的结构特征和芯片介绍,本章主要对DSP芯片的基本结构特征以及主要厂商的DSP芯片进行介绍,使读者对DSP的基本结构、种类和用途有基本的了解,为以后选择和应用DSP芯片奠定基础。本节为大家介绍DSP指令和指令周期。
2.1.4& DSP指令和指令周期
为了提高数字信号的处理速度,专门为DSP设计了一套特殊的DSP指令。例如在TMS32110中DMOV指令就是一个特殊的DSP指令,其作用是在存储器中移动数据以实现延迟;还有LTD,它是指一个指令周期内完成LT、DMOV和APAC 3条指令。可见一条特殊的DSP指令就能完成好几条指令能完成的工作。
指令周期(Instruction Cycle,ICY)是指执行一条指令所需要的时间,通常以纳秒(ns)为单位。由于DSP芯片具有特殊的结构,即具有多总线结构、流水线操作、专用的硬件乘法器和特殊的DSP指令,故可使DSP的指令周期减小很多。TMS320系列芯片的指令周期已经从第一代的200ns降低至现在的20ns以下。快速的指令周期使得DSP芯片能够实时实现许多应用。
【责任编辑: TEL:(010)】&&&&&&
关于&&的更多文章
Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
本书全面讲解WPF的实际工作原理,是一本WPF权威著作。
SQL Server 2012附带了强大的Analysis Services新功能
本书通过对目前中国企业在风险管理和内部控制工作中的
本书主要介绍由Sun微系统公司创建的Java编程语言。
除了核心内容外,Java还有许多免费的财富,即开放源代码的库。本书就是为了
51CTO旗下网站博客访问: 655602
博文数量: 157
博客积分: 4195
博客等级: 上校
技术积分: 2548
注册时间:
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
cmd文件是使用TI芯片很重要的一步,了解它,能对整个软件系统的分布,对芯片本身资源的使用有一个更清晰的了解,从而达到优化系统的目的。CMD文件一句话来表达:定义芯片内部硬件资源和分配管理软件代码的一个配置文件。因此从cmd文件的组织上你能看到两个部分:1定义硬件资源,2管理软件代码(非原创,总结与网络)
用户通过编写&文件,来管理、分配系统中的所有物理存储器和地址空间。文件,全名连接命令文件()以后缀结尾。
文件其实就是&用户的“声明”&,包括两方面的内容:
、用户声明的整个系统里的存储器资源。无论是&芯片自带的,还是用户外扩的,凡是可以&使用的、需要用到的存储器和空间,用户都要一一声明出来:有哪些存储器,它们的位置和大小。如果有些资源根本用不到,可以视为不存在,不必列出来;列出来也无所谓。
、用户如何分配这些存储器资源,即关于资源分配情况的声明。用户根据自己的需要,结合芯片的要求,把各&种数据分配到适当种类、适当特点、适当长度的存储器区域
声明存储空间
程序存储空间
中断向量&&&
数据存储空间
外部存储器&&
分配段到存储空间
中断向量表&&代表输出段,同样可以写成或和平级的还有,定义输出段将会在哪里运行,语法或,当只出现一个或时表示地址相同
这个其实是.bss
load = SARAM PAGE1
&&&&&&&&&&&&&&&&&&& }的简写。表示输入端和输出段同名
1 资源清单
如上文所述,&文件包含两大内容,首先就是存储器的资源清单,或者说,系统中&(电路板上)可用的存储器资源。
规定,文件的资源清单用关键字“”作为标识,具体内容写在后面的大括号&里面。如下面的形式:
其中,,,,,包括冒号、等于号、花括号,都是关键字符,必不可少。
表示把可用的资源空间再划分成几个大块,最多允许分块,从到。
很多关键字,还允许有别的写法,比&如“”可以写为“”&,“”可以写为。这些规定和其他细节,可以去查阅&的&文档。
& 资源的分配
首先,,,包括花括号、冒号,都是关键字符。注意:字符是复数形式。在花括号内,每一行最左侧的“”&、“”&、“”&、“”&、这些名称,包括小数点,都是&默认的关键字符,只有“”是用户自己定义的名称。另外,“”、“”&、“”&、“”&、“”必须是
在&里声明过的资源名称。除此以外,有些字符也允许有别的写法,参见,汇编语言工具指南。这些东西,就是前文所说,对存储器资源有要求的“状&况”!前面声明的存储器资源,就是要分配给这些“状况”使用的!
段分为两类:已初始化段&()和未初始化段(。以下是常用的一些段(不全):
, 表示“中断向量段”
,&& 编译后生成的二进制指令代码段
段,“对全局变量和静态变量初始化的常数”&。
,“保存全局变量和静态变量”,它属于“未初始化的”段,
,堆栈,它属于“未初始化的”段,定位在数据空间。
,用户自定义的段,&属于“未初始化的”注意:1.主要有和,上的可以到和都是的常数,在以前的一些由于它的地址总线是的,所以相应的和只能为的常数。以开始,就是定义的输出段。的格式有:的格式有:
阅读(5824) | 评论(0) | 转发(2) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 国瓷7501梅瓶 的文章

 

随机推荐