图像转换为二维数组存入DSP6748
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。博客不用于商業(yè)活動(dòng),博主對博客的使用,擁有最終解釋權(quán)?
本文為原創(chuàng)作品,未經(jīng)本人同意,禁止轉(zhuǎn)載,禁止用于商業(yè)用途!本人對博客使用擁有最終解釋權(quán)?
歡迎關(guān)注我的網(wǎng)上圖書室: [晨鳧追風(fēng)]和 微信公眾號:青春當(dāng)追風(fēng)
 
這篇博客主要是要講怎么把一張圖片存成一個(gè)二進(jìn)制的文件,直接存到DSP中來做處理,而不用考慮DSP與圖像采集模塊,或者上位機(jī)之間的數(shù)據(jù)通信使得我們更加專注于算法的開發(fā)研究和處理功能的實(shí)現(xiàn)。
 
這是最近在做的一樣工作,主要開發(fā)對雷達(dá)圖像處理的目標(biāo)檢測算法。思路是先把現(xiàn)成的雷達(dá)圖片轉(zhuǎn)化為一個(gè)數(shù)組,然后以頭文件的形式包含到程序中。用來驗(yàn)證算法和計(jì)算速度。DSP采用TI公司的6000系列單核處理器,6748。(背景交代完畢,可以忽略)。
 
開胃小菜---MATLAB?size()函數(shù) imread()函數(shù)
在matlab中,對于size函數(shù),其返回值為:
[ROW,COL] = size(A),
例如:
A = [0, 1 ,2; 0, 1, 2]; size(A)ans =
????2????3
此處A為兩行三列的矩陣
在讀取一張圖片之后,(此處默認(rèn)為灰度圖)返回一個(gè)矩陣,行數(shù)和列數(shù)則分別對應(yīng)于圖像的高度和寬度,
str1 = 'C:\Users\yezi\Desktop\dsp處理\'; str2 = '111.bmp'; str3 = strcat(str1,str2); image = imread(str3);在matlab中讀一張?jiān)谥付窂较碌膱D片,matlab已經(jīng)提供了一個(gè)imread()函數(shù),它返回?cái)?shù)字圖片每一點(diǎn)像素的灰度值,存成一個(gè)矩陣image。
?????行數(shù)——高度
???? 列數(shù)——寬度
?圖片高度寬度怎么看?
在圖片上【右鍵】—【屬性】—【詳細(xì)信息】
在Opencv中同樣提供一個(gè)imread函數(shù),讀取一個(gè)圖片,并存為一個(gè)Mat類的對象。也是包含一個(gè)圖像矩陣,行數(shù)列數(shù)與matlab是一樣的。
把圖片存成一個(gè)一維數(shù)組,然后在DSP中要把它恢復(fù)成一個(gè)二維矩陣,于是行數(shù)列數(shù)就顯得相當(dāng)重要。正是對這個(gè)函數(shù)的理解,解決了我在DSP中讀取圖片時(shí)把行數(shù),列數(shù)搞混后出現(xiàn)錯(cuò)誤,先記住它。
 
DSP6748讀取圖片相關(guān)介紹
在對DSP6748進(jìn)行圖像處理算法開發(fā)時(shí),你可以利用fopen(),fread()函數(shù),在CCS集成開發(fā)環(huán)境下,直接讀取上位機(jī)中指定路徑下的文件,但是這必須是在Debug模式下,通過仿真器進(jìn)行鏈接才能實(shí)現(xiàn)。
在仿真模式下,通過仿真器讀取上位機(jī)中的一張圖片,需要耗費(fèi)很長時(shí)間。因此為了算法調(diào)試的速度和需要,我把圖片轉(zhuǎn)化為一個(gè)頭文件包含到程序中,這也是通常的做法。
 
圖片轉(zhuǎn)換為字符數(shù)組形式
 
TI提供的轉(zhuǎn)換工具
TI公司提供了一個(gè)轉(zhuǎn)換的小工具,在C6748_StarterWare包中,具體路徑為:..\C6748_StarterWare_1_20_04_01\tools\bmp2c
具體用法:
 
把要轉(zhuǎn)化的圖片拷貝到該工具tools\bmp2c目錄下
在該目錄下,按住shift按鍵,鼠標(biāo)右鍵—【在此處打開命令窗口】
輸入命令:bmp2c -8 InPutName.bmp OutPutName.c?
自動(dòng)生成字符數(shù)組文件 OutPutName.c
圖片:
轉(zhuǎn)換窗口:
 
轉(zhuǎn)換出來的文件:
 
看著好像很方便,但是好事總是多磨,不幸的是這個(gè)工具只是支持24位深度和16位深度的圖片,而我所需要的卻是要把一幅8位的圖片,就是灰度圖轉(zhuǎn)化為字符數(shù)組文件,于是自己動(dòng)手豐衣足食:
 
我的轉(zhuǎn)換工具
 
再上我編寫的matlab的代碼:
%%讀入灰度圖像,轉(zhuǎn)化為二進(jìn)制文件,即一個(gè)一維數(shù)組 clear clc [RGB,map]=imread('gray1234.bmp');%讀入需要轉(zhuǎn)化的圖片,圖片和m文件一個(gè)路徑下 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'); %在當(dāng)前目錄下創(chuàng)建一個(gè)文件寫入數(shù)據(jù) fprintf(fid,information12); fprintf(fid,information13);fprintf(fid,'const unsigned char image[] = {\n');%寫數(shù)組名 n=0; for i=1:M%fprintf(fid,'{'); for j=1:N ?%寫數(shù)據(jù)n=n+1; fprintf(fid,'0x%x',I1(i,j));if (j ~= N ) || (i ~= M );fprintf(fid,','); endend fprintf(fid,'\n'); end fprintf(fid,'};\n'); fprintf(fid,'#endif /* IMAGE_H_ */'); fclose(fid);因?yàn)镸ATLAB可以支持好多種圖片格式的讀取,所以只要把圖片后綴名變換,該工具就可以支持多種格式的圖片!!!但是是轉(zhuǎn)換灰度圖,其實(shí)是一個(gè)二維數(shù)組,但是可以按照上面的思路,稍微修改代碼,便可以轉(zhuǎn)出rgb的三維數(shù)組。
代碼下載地址:點(diǎn)擊打開鏈接
轉(zhuǎn)換之后的頭文件:
至此轉(zhuǎn)換完成。
把該頭文件包含到CCS工程中,就可以直接對圖片進(jìn)行處理了。
?在CCS中的主函數(shù)測試代碼:
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為把該圖片一維數(shù)組重新轉(zhuǎn)為二維數(shù)組。要注意其中height為行數(shù),width為列數(shù)
 
正如上圖所示,把width和height分清楚了,再把一維數(shù)組轉(zhuǎn)化為二維數(shù)組就不會(huì)錯(cuò)。這時(shí)候用到我開頭講到的那個(gè)注意事項(xiàng)。
好了本文到此結(jié)束!歡迎有興趣的朋友一起交流,批評指正!希望我的思路能給你帶來一些靈感!
總結(jié)
以上是生活随笔為你收集整理的图像转换为二维数组存入DSP6748的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: HTML5 API详解(1):fulls
- 下一篇: 第九节:掌握vue的另一个核心:组件
