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