基于S3C2410的的圖像采集系統(tǒng)
(6)關(guān)閉視頻設(shè)備。
本文編寫采集程序是在安裝Linux操作系統(tǒng)的宿主機(jī)PC機(jī)上進(jìn)行的,之后再移植到開(kāi)發(fā)板上。下面是具體論述。
之前我們講到了在V4L中定義的主要數(shù)據(jù)結(jié)構(gòu)及其功能。對(duì)應(yīng)著這些內(nèi)容,我們需要對(duì)這些數(shù)據(jù)結(jié)構(gòu)進(jìn)行定義,以抽象化一個(gè)視頻設(shè)備。以下是具體的定義內(nèi)容:
攝像頭、采集圖像和關(guān)閉攝像頭的操作。采集程序中定義了如下的函數(shù),以實(shí)現(xiàn)前面講到的功能。
intinit_videoIn(structvdIn*vd,char*device,intwidth,intheight,intgrabmethod);初始化攝像頭設(shè)備。*vd包含了之前定義的數(shù)據(jù)結(jié)構(gòu)中的基本信息。另外還要對(duì)攝像頭采集圖像的大小、采集模式等參數(shù)進(jìn)行賦值。
intv4lGrab(structvdIn*vd,char*filename);采集圖像主程序。*filename為圖像的文件名,我們可以通過(guò)對(duì)文件名的設(shè)置來(lái)確定圖像保存的位置。
intclose_v4l(structvdIn*vd);關(guān)閉攝像頭intget_jpegsize(unsignedchar*buf,intinsize);采集圖像的大小。
因?yàn)槲覀兪峭ㄟ^(guò)調(diào)用采集主函數(shù)intv4lGrab(structvdIn*vd,char*filename)來(lái)實(shí)現(xiàn)圖像的采集和保存的,所以需要詳細(xì)的講解一下該函數(shù)的構(gòu)成。以下是該函數(shù)的具體內(nèi)容:
首先,我們需要定義幾個(gè)參數(shù),如下: FILE*fp;定義一個(gè)文件類型指針,指向我們采集到的圖像文件intlen; 定義一個(gè)整型變量,記錄從內(nèi)存中讀取的數(shù)據(jù)量intsize; 定義一個(gè)整型變量,指明一幀圖像的數(shù)據(jù)量interreur=0;定義一個(gè)整型變量,指明運(yùn)行時(shí)的錯(cuò)誤返回值intjpegsize;定義一個(gè)整型變量,指明我們需要的圖像大小。 接著我們調(diào)用read(vd->fd,vd->pFramebuffer,size)函數(shù),把存放于圖像緩沖區(qū)的數(shù)據(jù)讀入到指定的臨時(shí)文件中。之后根據(jù)我們對(duì)圖像的大小、亮度、對(duì)比度等要求轉(zhuǎn)化之前采集到的圖像數(shù)據(jù),最后我們打開(kāi)一個(gè)文件,把圖像數(shù)據(jù)寫入到該文件中并保存。 4 結(jié)論 本文設(shè)計(jì)了一種嵌入式視頻采集系統(tǒng),該系統(tǒng)小巧,并且在保證當(dāng)前信息完整的情況下,盡可能少的占用存儲(chǔ)容量,實(shí)現(xiàn)了該系統(tǒng)的圖像采集、存儲(chǔ)和重現(xiàn)功能。在硬件規(guī)劃上,采用實(shí)用簡(jiǎn)單的USB接口通信。且系統(tǒng)中預(yù)留了豐富的外設(shè)接口,便于今后的擴(kuò)展升級(jí)。
評(píng)論