国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

嵌入式Linux的圖像采集與顯示

發(fā)布時(shí)間:2010-9-19 18:21    發(fā)布者:conniede
關(guān)鍵詞: Framebuffer , linux , USB , 圖像采集
1 系統(tǒng)平臺的硬件結(jié)構(gòu)

本文使用的系統(tǒng)平臺硬件功能框圖如圖1所示,該平臺采用Samsung公司的處理器S3C2410。該處理器內(nèi)部集成了ARM公司ARM920T處理器核的32b微控制器,資源豐富,帶獨(dú)立的16kB的指令Cache和16kB數(shù)據(jù)Cache,LCD控制器、RAM控制器,NAND閃存控制器,3路UART、4路DMA、4路帶PWM的Timer、并行I/O口、8路10位ADC、Touch Screen接口,I2C接口,I2S接口、2個(gè)USB接口控制器、2路SPI,主頻最高可達(dá)203MHz。在處理器豐富資源的基礎(chǔ)上,還進(jìn)行了相關(guān)的配置和擴(kuò)展,平臺配置了16MB 16b的FLASH和64MB 32位的SDRAM,通過以太網(wǎng)控制器芯片AX88796擴(kuò)展了一個(gè)網(wǎng)口,另外引出了一個(gè)HOST USB接口。在USB接口上外接一個(gè)帶USB口的攝像頭。另外,還配有分辨率為320×240,256色的LCD。



2 嵌入式Linux簡介


Linux操作系統(tǒng)具有相當(dāng)多的優(yōu)點(diǎn),他的內(nèi)核穩(wěn)定、功能強(qiáng)大、支持多種硬件平臺、源代碼完全開放,可裁減和低成本的特性非常適合于嵌入式應(yīng)用,并且Linux本身直接提供完整的TCP/IP協(xié)議,可非常方便地進(jìn)行網(wǎng)絡(luò)應(yīng)用。但Linux內(nèi)核本身不具備強(qiáng)實(shí)時(shí)性,且內(nèi)核體積較大,而且嵌入式系統(tǒng)的硬件資源有限,因此把Linux用于嵌入式系統(tǒng),必須對Linux進(jìn)行實(shí)時(shí)化和嵌入式化,即通過配置內(nèi)核,裁減shell和嵌入式C庫對系統(tǒng)定制,使整個(gè)系統(tǒng)能夠存放到容量較小的FLASH中,Linux的動(dòng)態(tài)模塊加載,使Linux的裁減極為方便,高度模塊化的部件使添加非常容易。

整個(gè)系統(tǒng)軟件是在嵌入式Linux的基礎(chǔ)上構(gòu)建的。S3C2410平臺使用的Linux內(nèi)核是在Linux-2.4.18內(nèi)核打上patch-2.4.18-S3C2410這個(gè)補(bǔ)丁后編譯而成。S3C2410平臺使用的文件系統(tǒng)是yaffs,文件系統(tǒng)包括應(yīng)用程序、模塊、配置文件和庫等,圖像的采集和顯示是建立在嵌入式Linux內(nèi)核之上的,整個(gè)軟件系統(tǒng)如圖2所示。



通常宿主機(jī)和目標(biāo)板上的處理器不同,宿主機(jī)通常為Intel處理器,而目標(biāo)板如圖1所示為SAMSUNG S3C2410,所以程序需要使用針對處理器特點(diǎn)的編譯器才能生成在相應(yīng)平臺上可運(yùn)行的代碼,GNU編譯器提供這樣的功能,在編譯時(shí),可以選擇開發(fā)所需的宿主機(jī)和目標(biāo)機(jī),從而建立開發(fā)環(huán)境。在進(jìn)行嵌入式開發(fā)前的第一步工作就是把一臺PC機(jī)作為宿主機(jī)開發(fā)機(jī),并在其上安裝指定操作系統(tǒng)。對于嵌入式Linux,宿主機(jī)PC上應(yīng)安裝Linux系統(tǒng)。之后,在宿主機(jī)上建立交叉編譯調(diào)試的開發(fā)環(huán)境,開發(fā)環(huán)境的具體建立這里不細(xì)談。本文采用移植性很強(qiáng)的C語言在宿主機(jī)上編寫視頻采集程序,再利用交叉編譯調(diào)試工具編譯鏈接生成可執(zhí)行代碼,最后向目標(biāo)平臺移植。

3 基于Video4Linux的圖像采集

Video4Linux是Linux中關(guān)于視頻設(shè)備的內(nèi)核驅(qū)動(dòng),他為針對視頻設(shè)備的應(yīng)用程序編程提供一系列接口函數(shù),在Linux下,視頻采集設(shè)備的正常使用依賴于對Video4 Linux標(biāo)準(zhǔn)的支持。如果使用Video4Linux,在編譯內(nèi)核時(shí),一定要選中Multimedia Devices下的Video for Linux選項(xiàng),本文針對的設(shè)備文件是 / dev / video,使用的器件是基于OV511的USB攝像頭。在運(yùn)行程序前,一定要先加載USB及OV511設(shè)備驅(qū)動(dòng)模塊,同時(shí)加載Video4Linux模塊,分別使用命令:modprobe usbcore,modprobe usbohci,modprobe videodev和modprobe ov511,以確保生成設(shè)備文件/dev/video,若使用的Linux操作系統(tǒng)不支持modprobe命令,也可使用insmod命令。一般來講,基于Video4Linux的圖像采集的程序流程如圖3所示。




以下簡單介紹程序的編寫,在這里只給出關(guān)鍵部分的實(shí)現(xiàn)代碼。

首先,必須聲明包含2個(gè)頭文件:

                              

在獲取圖像信息后,還可根據(jù)需要改變這些信息,例如對比度、亮度、調(diào)色板等,具體做法是先給video_picture中相應(yīng)變量賦新值,再利用VIDIOCSPICT ioct1函數(shù)。

第2部分,使用mmap方式的單幀圖象采集:

                          

然后調(diào)用ioct1(grab_fd,VIDIOCSYNC,&fRAMe)函數(shù),該函數(shù)成功返回則表示采集完畢,采集到的圖像數(shù)據(jù)放到以data為起始地址,長度為240×320×3的內(nèi)存區(qū)域中,讀取該內(nèi)存中的數(shù)據(jù)便可得到圖像數(shù)據(jù)。

在此基礎(chǔ)上同樣可實(shí)現(xiàn)連續(xù)幀的采集,即一次采集連續(xù)多幀圖像的數(shù)據(jù),Video4Linux最多支持一次采集32幀,此時(shí)首先要設(shè)置grab_buf.frame為要采集的幀數(shù),而每一幀的數(shù)據(jù)在內(nèi)存中的位置為data+grab_vm.offsets[frame],其中g(shù)rab_vm為video_mbuf結(jié)構(gòu)體變量的一個(gè)聲明,利用ioct1(fd,VIDIOCGMBUF,&grab_vm)便可獲得grab_vm的信息。

4 基于FrameBuffer的圖象顯示

當(dāng)Video4Linux使用mmap方式采集圖像時(shí),他總是盡最大努力將圖像直接顯示在屏幕上,但并不一定能夠完成,因此一個(gè)完整的設(shè)備應(yīng)該具有圖像顯示的功能,一般來講,嵌入式Linux下顯示一幅圖像總共有以下幾種方法:

(1)在利用Video4Linux采集圖像時(shí),將采集到的圖象數(shù)據(jù)直接放到FrameBuffer的內(nèi)存映射區(qū)中,而Video4Linux也支持這種功能,利用VIDIOCSFBUF和VIDIOCGFBUF這兩個(gè)ioct1函數(shù),可設(shè)置和獲得struct video_buffer。但該方法并不是每個(gè)圖像采集設(shè)備都支持。

(2)進(jìn)圖像數(shù)據(jù)存成各種格式(例如bmp),在各種GUI軟件中,均會直接顯示不同格式的圖像的函數(shù),如MiniGui中的FillBoxWithBitmap函數(shù)。

(3)直接將圖像數(shù)據(jù)寫入FrameBuffer中。 在這里主要介紹第3種。

FrameBuffer設(shè)備是運(yùn)行在Linux控制臺上的一個(gè)優(yōu)秀的圖形接口,他幾乎支持所有的硬件,提供了統(tǒng)一的API接口,很好地實(shí)現(xiàn)了硬件無關(guān)性,他可以直接操作顯存,而且還留有提供圖形加速功能的接口,運(yùn)行時(shí)不需要root權(quán)限;FrameBuffer的設(shè)備節(jié)點(diǎn)是/dev/fb*,用戶若要使用他,需要在編譯內(nèi)核時(shí)選中FrameBuffer,其簡單的使用程序如下:

                                 

從vinfo和finfo中取得顯存起始地址、分辨率、色深等信息,然后根據(jù)這些計(jì)算出需映射顯存的大小。

                                 

由此便可直接操作大小為screensize,起始地址為fbp的內(nèi)存區(qū)域,在LCD上直接顯示圖像、圖形、文字等,例如執(zhí)行memset(fbp,0,screensize)將進(jìn)行清屏操作。

需要注意的是,對于色深為8位或8位以下的設(shè)備,在進(jìn)行繪圖操作前還需要設(shè)置合適的調(diào)色板,操作調(diào)色板要用到fb_camp結(jié)構(gòu),執(zhí)行ioctl(fd,F(xiàn)BIOGETCMAP,&old_cmap)將保存調(diào)色板信息,執(zhí)行ioctl(fd,F(xiàn)BIO-PU TCMAP,&new_cmap)將設(shè)置新的調(diào)色板。以下介紹如何顯示一個(gè)象素,這里假設(shè)LCD為24位色的。

                                

由此便可逐一顯示每個(gè)象素,進(jìn)而顯示整幅圖像。

5 結(jié)語

由于Linux的驅(qū)動(dòng)模型支持模塊堆疊技術(shù),內(nèi)核開發(fā)者已提供了一些通用模塊,因此,雖然文中是以USB攝像頭為例,但只要針對自己的圖像采集設(shè)備編寫基于Video4 Linux的驅(qū)動(dòng)程序,針對自己的LCD編寫基于FRAMeBuffer的驅(qū)動(dòng)程序,以上的程序便可成為通用的圖像采集與顯示程序。應(yīng)用本文所述方法完成圖像采集與顯示工作,再加上相關(guān)的處理并接入網(wǎng)絡(luò),就構(gòu)成了一個(gè)智能終端設(shè)備,可用于工廠、銀行等場合全天候的智能監(jiān)控,圖像的網(wǎng)絡(luò)通信等,具有廣闊的是市場和應(yīng)用前景。
本文地址:http://www.qingdxww.cn/thread-28097-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 想要避免發(fā)生災(zāi)難,就用MPLAB SiC電源仿真器!
  • 利用模擬開發(fā)工具生態(tài)系統(tǒng)進(jìn)行安全電路設(shè)計(jì)
  • 深度體驗(yàn)Microchip自動(dòng)輔助駕駛應(yīng)用方案——2025巡展開啟報(bào)名!
  • 我們是Microchip
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产精品青草不卡 | 免费羞羞网站视频 | 日韩一区二区三区在线免费观看 | 色丁香在线 | 99自拍网 | 国产偷亚洲偷欧美偷精品 | 国产区香蕉精品系列在线观看不卡 | 亚洲国产精品线观看不卡 | 欧美成人精品大片免费流量 | 日韩毛片免费 | 国产一区二区三区不卡在线观看 | 日本岛国大片 | 色婷婷一区二区三区四区成人网 | 国产精品久久现线拍久青草 | 欧美精品成人一区二区在线观看 | 黄色草逼网站 | 草莓视频无限频下载-丝瓜视 | 国产白色视频在线观看w | 4hc44四虎www亚洲 | 天天襙| 免费毛片儿 | 亚洲国产欧美91 | 99热精品国产麻豆 | 色婷婷在线视频观看 | 毛片免费全部完整播放 | 日韩第五页| 九九99精品| a级亚洲片精品久久久久久久 | 四虎欧美 | 国内自拍成人网在线视频 | 亚洲天堂男人的天堂 | 亚洲欧洲另类 | 韩国日本免费不卡在线观看 | 四虎精品影院永久在线播放 | 99视频全部看免费观 | 精品99在线观看 | 久久免费99精品国产自在现线 | 美国免费视频 | www欧美在线观看 | 日韩免费成人 | 欧美一级久久久久久久久大 |