a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux系統的圖像采集與顯示

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

作者: 時間:2012-05-22 來源:網絡 收藏

首先,必須聲明包含2個頭文件:

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

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

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

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

4 基于FrameBuffer的圖象顯示

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

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

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

(3)直接將圖像數據寫入FrameBuffer中。

在這里主要介紹第3種。FrameBuffer設備是運行在Linux控制臺上的一個優秀的圖形接口,他幾乎支持所有的硬件,提供了統一的 API接口,很好地實現了硬件無關性,他可以直接操作顯存,而且還留有提供圖形加速功能的接口,運行時不需要root權限;FrameBuffer的設備節點是/dev/fb*,用戶若要使用他,需要在編譯內核時選中FrameBuffer,其簡單的使用程序如下:

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

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

需要注意的是,對于色深為8位或8位以下的設備,在進行繪圖操作前還需要設置合適的調色板,操作調色板要用到fb_camp結構,執行 ioctl(fd,FBIOGETCMAP,&old_cmap)將保存調色板信息,執行 ioctl(fd,FBIO-PUTCMAP,&new_cmap)將設置新的調色板。以下介紹如何顯示一個象素,這里假設LCD為24位色的。

由此便可逐一顯示每個象素,進而顯示整幅圖像。

5 結語

由于Linux的驅動模型支持模塊堆疊技術,內核開發者已提供了一些通用模塊,因此,雖然文中是以USB攝像頭為例,但只要針對自己的設備編寫基于Video4 Linux的驅動程序,針對自己的LCD編寫基于FrameBuffer的驅動程序,以上的程序便可成為通用的與顯示程序。應用本文所述方法完成圖像采集與顯示工作,再加上相關的處理并接入網絡,就構成了一個智能終端設備,可用于工廠、銀行等場合全天候的智能監控,圖像的網絡通信等,具有廣闊的是市場和應用前景。

linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

linux相關文章:linux教程



上一頁 1 2 下一頁

評論


相關推薦

技術專區

關閉