本文为原创作品,转载请注明出处

欢迎关注我的博客: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

具体用法:

  1. 把要转化的图片拷贝到该工具tools\bmp2c目录下
  2. 在该目录下,按住shift按键,鼠标右键—【在此处打开命令窗口】
  3. 输入命令:bmp2c -8 InPutName.bmp OutPutName.c

  4. 自动生成字符数组文件 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的更多相关文章

  1. CSS如何将图像转换为模糊图像?

    在CSS中,可以使用filter属性来模糊处理图像:filter属性用于将图像转换为模糊图像.该属性主要用于设置图像的视觉效果. 语法: filter: blur() 属性值: ● blur():给图 ...

  2. 在C#中将图像转换为BASE64

    本教程说明如何在C#.NET Windows Forms Application中将图像转换为base64字符串,以及将base64字符串转换为图像.您可以创建一个新的Windows窗体应用程序项目来 ...

  3. c语言实现BMP图像转换为灰度图

    当初是自己要装X,非要用c来写信息隐藏作业,装了X,就得付出实践.查了好久资料,到期末才把作业交了,这里总结一下. 这道题是将真彩图转换为灰度图. 关于BMP文件结构,这是困扰了我好久的问题,上网查了 ...

  4. Python如何将RGB图像转换为Pytho灰度图像?

    我正尝试使用matplotlib读取RGB图像并将其转换为灰度.在matlab中,我使用这个: 1 img = rgb2gray(imread('image.png')); 在matplotlib t ...

  5. web页面的时间传入servlet如何转换为可以存入MySQL的Date类型

    在web页面中当使用如下语句: <input type="date" name="startTime"/> 提交到servlet中 在servlet ...

  6. [C#编程参考]把图像转换为数组的两种实现

    当一个程序和一个图片放在一起,无非有两种操作: 第一种,就是传输这个图片,在传输图片之前要首先把这个图片变成byte类型的数组.所以这时候我们用到的是图片的存储的数据,也就是图片属性中的大小.我们并不 ...

  7. 【Python开发】python PIL读取图像转换为灰度图及另存为其它格式(也可批量改格式)

    例如有一幅图,文件名为"a.jpg'.  读取: from PIL import Image #或直接import Image im = Image.open('a.jpg') 将图片转换成 ...

  8. OpenCV-Python图像转换为PyQt图像的变形及花屏无法正常显示问题研究

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<PyQt转换显示Python-OpenCV图像实现图形化界面的视频播放>介绍了实现在OpenCV和PyQt之间转换并传递图像实现在P ...

  9. MATLAB实现将图像转换为素描(简笔画)风格

    代码: colorgrad.m function [VG, A, PPG] = colorgrad(f, T) ) || (size(f,)~=) error('Input image must be ...

随机推荐

  1. js解决img标签加载失败显示默认图片

    问题: 为所有显示楼盘的页面添加一个加载失败的默认图片. 基本思路: img标签中有个onerror属性,专门用来处理加载失败的事件.所以可以用jquery添加onerror属性,在onerror中加 ...

  2. python第三天(dictionary应用)转

    1.题目: python实现英文文章中出现单词频率的统计   前言: 这道题在实际应用场景中使用比较广泛,比如统计历年来四六级考试中出现的高频词汇,记得李笑来就利用他的编程技能出版过一本背单词的畅销书 ...

  3. 并查集——poj2492(带权并查集入门)

    一.题目回顾 题目链接:传送门 题意:给定n只虫子,不同性别的可以在一起,相同性别的不能在一起.给你m对虫子,判断中间有没有同性别在一起的. 二.解题思路 种类并查集 和poj1073的本质一样 详见 ...

  4. Week 1 Team Homework #3 from Z.XML-软件工程在北航

    任务名称:软件工程在北航 任务要求:要求我们采访往届师兄师姐,收集他们对于软件工程这门课程的反馈.具体作业链接http://www.cnblogs.com/jiel/p/3311403.html 任务 ...

  5. 【翻译】介绍 ASP.NET Core 中的 Razor Pages

    介绍 ASP.NET Core 中的 Razor Pages 原文地址:Introduction to Razor Pages in ASP.NET Core         译文地址:介绍 asp. ...

  6. linux之shell脚本学习篇一

    此文包含脚本服务请求,字符串截取,文件读写内容,打印内容换行. #!/bin/bashretMsg="";while read LINEdo        echo "t ...

  7. javascript string对象方法replace

    最简单的replace用法是: var str = 'aaaaa9876b0000'; str.replace(/a/g,'A'); 有时候我们希望只是在匹配的位置添加特定的字符: var str = ...

  8. Python 日期时间相关

    #calendar日历模块 import calendar #calendar() 获取一年日历 result = calendar.calendar(2018,w = 2,l = 1,c = 6,m ...

  9. 我的emacs配置部分

    考场必记8行 (global-set-key (kbd "RET") 'newline-and-indent)//换行 (global-set-key (kbd "C-a ...

  10. [洛谷P2763]试题库问题

    题目大意:有 $k$ 种类型和 $n$ 个题目,每个题目会适应部分类型,第$i$个类型需要$s_i$的题,一道题只能满足一种类型,现要求出满足所有类型的题目的方案 题解:看到匹配,想到网络流,源点向试 ...