新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM920T處理器核的圖像采集系統(tǒng)設計

基于ARM920T處理器核的圖像采集系統(tǒng)設計

作者: 時間:2011-08-15 來源:網(wǎng)絡 收藏
當然我們還需要staticvoidzc301_shutdown(structusb_zc301*zc301)來關(guān)閉攝像頭。

本文引用地址:http://m.butianyuan.cn/article/150351.htm

  至此,攝像頭驅(qū)動的驅(qū)動基本完成。通過這些函數(shù)的設置我們可以把具體的硬件電路抽象化為數(shù)據(jù)結(jié)構(gòu)中的參數(shù)值。接下來我們可以通過V4L驅(qū)動來調(diào)用這些函數(shù),實現(xiàn)對參數(shù)的賦值、打開設備、和關(guān)閉設備等一系列的過程。

  重新編譯、運行內(nèi)核時,在串口反饋信息中會顯示USB攝像頭驅(qū)動程序成功加載。如圖3所示。

  

  圖3串口反饋信息3Video4Linux下的編程:

  Video4Linux,簡稱V4L,是Linux中關(guān)于視頻設備的內(nèi)核驅(qū)動,它為針對視頻設備的應用程序編程提供一系列半標準的接口。V4L利用這個接口,增加一些額外的功能,同時向外提供了一個屬于自己的API。我們可以通過調(diào)用V4L的API來實現(xiàn)各種功能。在Linux下,視頻設備的正常使用依賴于對Video4Linux標準的支持。目前的V4L涵蓋了視、音頻流捕捉及處理等內(nèi)容,USB攝像頭也屬于它支持的范疇。

  V4L中定義的主要數(shù)據(jù)結(jié)構(gòu):

  

  這些數(shù)據(jù)結(jié)構(gòu)都是由Video4Linux支持的,它們的用途如下:

  (1)video_capability包含攝像頭的基本信息,例如設備名稱、支持的最大最小分辨率、信號源信息等,分別對應著結(jié)構(gòu)體中成員變量name、maxwidth、maxheight、minwidth、minheight、channels(信號源個數(shù))、type等;

  (2)voide_picture包含設備采集的各種屬性,如brightness(亮度)、hue(色調(diào))、contrast(對比度)、whiteness(色度)、depth(深度)等;

  (3)video_mmap用于內(nèi)存映射;

  (4)voido_mbuf利用mmap進行映射的幀信息,實際上是輸入到攝像頭存儲器緩沖中的幀信息,包括size(幀的大小)、frames(最多支持的幀數(shù))、offsets(每幀相對基址的偏移)。

  在采集圖像之前,需要初始化這些數(shù)據(jù)結(jié)構(gòu)中的參數(shù)值,才能夠按照要求采集圖像數(shù)據(jù)。

  在USB攝像頭被驅(qū)動后,只需要再編寫一個對視頻流采集的應用程序就可以了。根據(jù)嵌入式開發(fā)特征,先在宿主機上編寫應用程序,再使用交叉編譯器進行編譯鏈接,生成在目標平臺的可執(zhí)行文件。宿主機與目標板通信采用打印終端的方式進行交叉調(diào)試,成功后移植到目標平臺。

  V4L圖像采集編程流程:

  (1)打開視頻設備;

  (2)讀取設備信息;

  (3)更改設備當前設置;

  (4)視頻采集得到圖像信息;

  (5)對采集到的圖像進行處理;

  (6)關(guān)閉視頻設備。

  本文編寫采集程序是在安裝Linux操作系統(tǒng)的宿主機PC機上進行的,之后再移植到開發(fā)板上。下面是具體論述。

  之前我們講到了在V4L中定義的主要數(shù)據(jù)結(jié)構(gòu)及其功能。對應著這些內(nèi)容,我們需要對這些數(shù)據(jù)結(jié)構(gòu)進行定義,以抽象化一個視頻設備。以下是具體的定義內(nèi)容:

  

  攝像頭、采集圖像和關(guān)閉攝像頭的操作。采集程序中定義了如下的函數(shù),以實現(xiàn)前面講到的功能。

  intinit_videoIn(structvdIn*vd,char*device,intwidth,intheight,intgrabmethod);初始化攝像頭設備。*vd包含了之前定義的數(shù)據(jù)結(jié)構(gòu)中的基本信息。另外還要對攝像頭采集圖像的大小、采集模式等參數(shù)進行賦值。

  intv4lGrab(structvdIn*vd,char*filename);采集圖像主程序。*filename為圖像的文件名,我們可以通過對文件名的設置來確定圖像保存的位置。

  intclose_v4l(structvdIn*vd);關(guān)閉攝像頭intget_jpegsize(unsignedchar*buf,intinsize);采集圖像的大小。

  因為我們是通過調(diào)用采集主函數(shù)intv4lGrab(structvdIn*vd,char*filename)來實現(xiàn)圖像的采集和保存的,所以需要詳細的講解一下該函數(shù)的構(gòu)成。以下是該函數(shù)的具體內(nèi)容:

  

  首先,我們需要定義幾個參數(shù),如下:

  FILE*fp;定義一個文件類型指針,指向我們采集到的圖像文件intlen;

  定義一個整型變量,記錄從內(nèi)存中讀取的數(shù)據(jù)量intsize;

  定義一個整型變量,指明一幀圖像的數(shù)據(jù)量interreur=0;定義一個整型變量,指明運行時的錯誤返回值intjpegsize;定義一個整型變量,指明我們需要的圖像大小。

  接著我們調(diào)用read(vd->fd,vd->pFramebuffer,size)函數(shù),把存放于圖像緩沖區(qū)的數(shù)據(jù)讀入到指定的臨時文件中。之后根據(jù)我們對圖像的大小、亮度、對比度等要求轉(zhuǎn)化之前采集到的圖像數(shù)據(jù),最后我們打開一個文件,把圖像數(shù)據(jù)寫入到該文件中并保存。

  4 結(jié)論

  本文了一種嵌入式視頻采集系統(tǒng),該系統(tǒng)小巧,并且在保證當前信息完整的情況下,盡可能少的占用存儲容量,實現(xiàn)了該系統(tǒng)的圖像采集、存儲和重現(xiàn)功能。在硬件規(guī)劃上,采用實用簡單的USB接口通信。且系統(tǒng)中預留了豐富的外設接口,便于今后的擴展升級。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉