图像转换为二进制文件存入DSP6748
本文为原创作品,转载请注明出处
欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/
这篇博客主要是要讲怎么把一张图片存成一个二进制的文件,直接存到DSP中来做处理,而不用考虑DSP与图像采集模块,或者上位机之间的数据通信使得我们更加专注于算法的开发研究和处理功能的实现。
这是最近在做的一样工作,主要开发对雷达图像处理的目标检测算法。思路是先把现成的雷达图片转化为一个数组,然后以头文件的形式包含到程序中。用来验证算法和计算速度。DSP采用TI公司的6000系列单核处理器,6748。(背景交代完毕,可以忽略)。
开胃小菜---MATLAB size()函数 imread()函数
在matlab中,对于size函数,其返回值为:
[ROW,COL] = size(A),
例如:
A = [0, 1 ,2; 0, 1, 2];
size(A)
ans =
2 3
此处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的代码:
%%读入灰度图像,转化为二进制文件
clear
clc
[RGB,map]=imread('gray1234.bmp');%读入需要转化的图片,图片和m文件一个路径下
H=RGB;
I1=double(H);
[M,N]=size(I1);
information12 = '#ifndef IMAGE_H_\n'
information13 = '#define IMAGE_H_\n\n\n\n\n'
fid=fopen('image.h','wt'); %打开一个文件写入数据
fprintf(fid,information12);
fprintf(fid,information13);
fprintf(fid,'const unsigned char image[] = {\n');
n=0;
for i=1:M
%fprintf(fid,'{');
for j=1:N
n=n+1;
fprintf(fid,'0x%x',I1(i,j));
if (j ~= N ) || (i ~= M );
fprintf(fid,',');
end
end
fprintf(fid,'\n');
end
fprintf(fid,'};\n');
fprintf(fid,'#endif /* IMAGE_H_ */');
fclose(fid);
转换之后的头文件:

至此转换完成。
把该头文件包含到CCS工程中,就可以直接对图片进行处理了。
在CCS中的主函数测试代码:
void main()
{
int i ;
int j;
for(i = 0; i < height; i++)
{
for (j = 0; j < width; ++j)
{
BA[i][j] = image[i * width + j];
}
}
BA为把该图片一维数组重新转为二维数组。要注意其中height为行数,width为列数

正如上图所示,把width和height分清楚了,再把一维数组转化为二维数组就不会错。这时候用到我开头讲到的那个注意事项。
好了本文到此结束!欢迎有兴趣的朋友一起交流,批评指正!希望我的思路能给你带来一些灵感!
图像转换为二进制文件存入DSP6748的更多相关文章
- CSS如何将图像转换为模糊图像?
在CSS中,可以使用filter属性来模糊处理图像:filter属性用于将图像转换为模糊图像.该属性主要用于设置图像的视觉效果. 语法: filter: blur() 属性值: ● blur():给图 ...
- 在C#中将图像转换为BASE64
本教程说明如何在C#.NET Windows Forms Application中将图像转换为base64字符串,以及将base64字符串转换为图像.您可以创建一个新的Windows窗体应用程序项目来 ...
- c语言实现BMP图像转换为灰度图
当初是自己要装X,非要用c来写信息隐藏作业,装了X,就得付出实践.查了好久资料,到期末才把作业交了,这里总结一下. 这道题是将真彩图转换为灰度图. 关于BMP文件结构,这是困扰了我好久的问题,上网查了 ...
- Python如何将RGB图像转换为Pytho灰度图像?
我正尝试使用matplotlib读取RGB图像并将其转换为灰度.在matlab中,我使用这个: 1 img = rgb2gray(imread('image.png')); 在matplotlib t ...
- web页面的时间传入servlet如何转换为可以存入MySQL的Date类型
在web页面中当使用如下语句: <input type="date" name="startTime"/> 提交到servlet中 在servlet ...
- [C#编程参考]把图像转换为数组的两种实现
当一个程序和一个图片放在一起,无非有两种操作: 第一种,就是传输这个图片,在传输图片之前要首先把这个图片变成byte类型的数组.所以这时候我们用到的是图片的存储的数据,也就是图片属性中的大小.我们并不 ...
- 【Python开发】python PIL读取图像转换为灰度图及另存为其它格式(也可批量改格式)
例如有一幅图,文件名为"a.jpg'. 读取: from PIL import Image #或直接import Image im = Image.open('a.jpg') 将图片转换成 ...
- OpenCV-Python图像转换为PyQt图像的变形及花屏无法正常显示问题研究
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<PyQt转换显示Python-OpenCV图像实现图形化界面的视频播放>介绍了实现在OpenCV和PyQt之间转换并传递图像实现在P ...
- MATLAB实现将图像转换为素描(简笔画)风格
代码: colorgrad.m function [VG, A, PPG] = colorgrad(f, T) ) || (size(f,)~=) error('Input image must be ...
随机推荐
- libvirt保持虚拟机运行情况下修改名称
通过virsh list命令能看到虚拟机的列表: [root@compute2 ~]# virsh list Id 名称 状态 ------------------------------------ ...
- Python 3 学习笔记之——键盘输入和读写文件
1. 键盘输入 Python提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘.input 可以接收一个 Python 表达式作为输入,并将运算结果返回. str = inp ...
- kvm-1
yum install libvirt* virt-* qemu-kvm* -y systemctl start libvirtd.service systemctl status libvirtd. ...
- python 调用RESTFul接口
本周需要将爬虫爬下来的数据入库,因为之前已经写好PHP的接口的,可以直接通过python调用PHP接口来实现,所以把方法总结一下. //python编码问题,因为好久用,所以很容易出现 # -*- c ...
- asp.net文件上传进度条研究
文章:asp.net 文件上传进度条实现代码
- wutianqi 博客 母函数
母函数(Generating function)详解 — Tanky Woo 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供 ...
- 指针C语言
一.PTA实验作业 题目一:6-7输出月份英文名 1.PTA提交列表 2.设计思路和流程图 这题只需补充子函数,定义指针数组month[12],分别从一月到十二月,再定义一个字符,让它为NULL,当输 ...
- CodeForces Round #521 (Div.3) D. Cutting Out
http://codeforces.com/contest/1077/problem/D You are given an array ss consisting of nn integers. Yo ...
- 【python】 json.dumps() json.dump()的区别
以前写的很简单,只有几句话,最近发现本文是本博客阅读量最大的一篇文章,觉得这样有种把人骗进来的感觉,于是又细化了一些.如果还有不好的地方,欢迎指出. 首先说明基本功能: dumps是将dict转化成s ...
- Visio中的Undo和Redo
1.Visio默认Undo和Redo操作是可用的,Appliacation中的UndoEnabled标志Undo和Redo操作是否可用. m_Visio.Window.Application.Undo ...