1. 程式人生 > >嵌入式Linux的影象採集與顯示

嵌入式Linux的影象採集與顯示

1 系統平臺的硬體結構

本文使用的系統平臺硬體功能框圖如圖1所示,該平臺採用Samsung公司的處理器S3C2410。該處理器內部集成了ARM公司ARM920T處 理器核的32b微控制器,資源豐富,帶獨立的16kB的指令Cache和16kB資料Cache,LCD控制器、RAM控制器,NAND快閃記憶體控制器,3路 UART、4路DMA、4路帶PWM的Timer、並行I/O口、8路10位ADC、Touch Screen介面,I2C介面,I2S介面、2個USB介面控制器、2路SPI,主頻最高可達203MHz。在處理器豐富資源的基礎上,還進行了相關的配 置和擴充套件,平臺配置了16MB 16b的FLASH和64MB 32位的SDRAM,通過乙太網控制器晶片

AX88796擴充套件了一個網口,另外引出了一個HOST USB介面。在USB介面上外接一個帶USB口的攝像頭。另外,還配有解析度為320×240,256色的LCD。

2 嵌入式Linux簡介

Linux作業系統具有相當多的優點,他的核心穩定、功能強大、支援多種硬體平臺、 原始碼完全開放,可裁減和低成本的特性非常適合於嵌入式應用,並且Linux本身直接提供完整的TCP/IP協議,可非常方便地進行網路應用。但 Linux核心本身不具備強實時性,且核心體積較大,而且嵌入式系統的硬體資源有限,因此把Linux用於嵌入式系統,必須對Linux進行實時化和嵌入 式化,即通過配置核心,裁減shell和嵌入式C庫對系統定製,使整個系統能夠存放到容量較小的FLASH中,Linux的動態模組載入,使Linux的 裁減極為方便,高度模組化的部件使新增非常容易。

整個系統軟體是在嵌入式Linux的基礎上構建的。S3C2410平臺使用的Linux核心是在Linux-2.4.18核心打上patch-2.4.18-S3C2410這個補丁後編譯而成。S3C2410平臺使用的檔案系統是yaffs,檔案系統包括應用程式、模組、配置檔案和庫等,影象的採集和顯示是建立在嵌入式Linux核心之上的,整個軟體系統如圖2所示。

通常宿主機和目標板上的處理器不同,宿主機通常為Intel處理器,而目標板如圖1所示為SAMSUNG-p.htm" rel="nofollow" target="_blank" title="SAMSUNG貨源和PDF資料">SAMSUNG S3C2410

, 所以程式需要使用針對處理器特點的編譯器才能生成在相應平臺上可執行的程式碼,GNU編譯器提供這樣的功能,在編譯時,可以選擇開發所需的宿主機和目標機, 從而建立開發環境。在進行嵌入式開發前的第一步工作就是把一臺PC機作為宿主機開發機,並在其上安裝指定作業系統。對於嵌入式Linux,宿主機PC上應 安裝Linux系統。之後,在宿主機上建立交叉編譯除錯的開發環境,開發環境的具體建立這裡不細談。本文采用移植性很強的C語言在宿主機上編寫視訊採集程 序,再利用交叉編譯除錯工具編譯連結生成可執行程式碼,最後向目標平臺移植。

3 基於Video4Linux的影象採集

Video4Linux是Linux中關於視訊裝置的核心驅動,他為針對視訊裝置的 應用程式程式設計提供一系列介面函式,在Linux下,視訊採集裝置的正常使用依賴於對Video4 Linux標準的支援。如果使用Video4Linux,在編譯核心時,一定要選中Multimedia Devices下的Video for Linux選項,本文針對的裝置檔案是/dev/video,使用的器件是基於OV511的USB攝像頭。在執行程式前,一定要先載入USB及OV511 裝置驅動模組,同時載入Video4Linux模組,分別使用命令:modprobe usbcore,modprobe usbohci,modprobe videodev和modprobe ov511,以確保生成裝置檔案/dev/video,若使用的Linux作業系統不支援modprobe命令,也可使用insmod命令。一般來講,基 於Video4Linux的影象採集的程式流程如圖3所示。

以下簡單介紹程式的編寫,在這裡只給出關鍵部分的實現程式碼。

首先,必須宣告包含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影象採集顯示

1 系統平臺的硬體結構 本文使用的系統平臺硬體功能框圖如圖1所示,該平臺採用Samsung公司的處理器S3C2410。該處理器內部集成了ARM公司ARM920T處 理器核的32b微控制器,資源豐富,帶獨立的16kB的指令Cache和16kB資料Cache,LCD控制器、RA

opencv實現攝像頭的實時影象採集顯示

環境配置:vs2010+opencv2.3.1(注:opencv2.4.9讀取攝像頭出現問題--原因還沒找到,望指教) code // Camera.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <cv.

基於嵌入式Linux的視訊影象採集傳輸

摘要:視訊影象採集及處理技術在遠端視訊監控和可視電話中有著廣泛的應用前景,驅動視訊採集裝置和獲取視訊資料並進行相應的處理,是實現這些應用的基礎。針對這些應用,構建了一個基於嵌入式 Linux和 PXA270微處理器的視訊採集與傳輸系統,利用 Video4Linux實現 US

嵌入式Linux下中文字型顯示

By Toradex 胡珊逢 1). 簡介 嵌入式平臺預設釋出的嵌入式Linux版本通常並不包含中文字型支援,本文就通過Toradex計算機模組平臺來演示如何新增中文字型的顯示,因為Toradex的Linux釋出是基於OpenEmbedded/Yocot 專案編譯的,因此這

嵌入式Linux記憶體使用效能優化》筆記

這本書有兩個關切點:系統記憶體(使用者層)和效能優化。 這本書和Brendan Gregg的《Systems Performance》相比,無論是技術層次還是更高的理論都有較大差距。但是這不影響,快速花點時間簡單過一遍。 然後在對《Systems Performance》進行詳細的學習。 由於Ubuntu測

基於ARM11的嵌入式linux系統移植實現--筆記四

觸控式螢幕硬體原理 從技術上可以分為五類:一,電阻式觸控式螢幕,定位精準,便宜,不支援多點觸控。二,電容式觸控式螢幕,支援多點觸控,定位不夠精準。三,紅外線技術觸控式螢幕,利用紅外對管來實現定位,一般應用在大型的顯示螢幕,需要突起的邊框來安裝紅外感測器。四,表面聲波技術觸控式螢幕,解決了其他螢幕存在的問題

視訊影象傳輸顯示(2)——彩色模擬電視廣播制式NTSC、PAL和SECAM

影象和伴音的調製方式、影象訊號極性、影象和伴音的載頻差、頻頻寬度、頻道間隔、掃描引數等。世界各國所採用的黑白電視制式有:A、B、C、D、E、G、H、I、K、K1、L、M、N等,共計13種(其中A、C、E已不採用),我國為其中的D、K制。

V4L2視訊採集H.264編碼原始碼大放送:Linux視訊採集編碼(三)

這幾天的努力也算沒有白費,現在我將貢獻出我的成果,當然程式碼很大一部分都不是我寫的。 V4L2視訊採集我參考了V4L2官方原始碼,H.264編碼我使用了開源編碼庫x264,並參考了網上的一些例子。 但

利用Android Camera2 的照相機api 實現 實時的影象採集預覽

https://blog.csdn.net/DavidWillo/article/details/63688319  最近想要做一個客戶端往伺服器推送實時畫面的功能,首先可以考慮到兩種思路,一種是在客戶端進行視訊流的推送,主要利用RTSP等流媒體協議進行傳輸,而另外一種是通過

嵌入式Linux記憶體使用效能優化

1.  怎樣檢視系統當前可用記憶體 ? 答:使用 free 命令即可。如下圖所示: 說明: buffers: 主要用來給Linux系統中塊裝置做緩衝區(把分散的寫操作集中進行,減少對磁碟或者Flash裝置的寫次數,提高系統性能) cached:用來緩衝開啟的檔案(把從

Python+OpenCV靜態影象讀取顯示_Haar模型實現簡單的人臉識別

目的: 1.主要是熟悉一下靜態影象的讀取與顯示; 2.然後瞭解下基於OpenCV安裝目錄下haar特徵識別人臉區域(人臉特徵資料) 基於“tengxing007”的部落格: Python + OpenCV 實現簡單的人臉識別點選開啟連結 下載了作者github上的程式碼,程

嵌入式linux開發板 主機linux 串列埠傳輸檔案

一  在嵌入式linux和主機linux下可以通過minicom       1)安裝minicom  有的系統沒有安裝minicom    fedora下只需 yum install minicom即可       2)配置minicom             第一次執

【opencv系列02】OpenCV4.X影象讀取顯示

### 一、讀取圖片 opencv中採用`imread()` 函式讀取影象 `imread(filename, flags=None)`     `filename` 圖片的路徑     `flags` 影象讀取方式

Zedboard & Zynq 影象採集(五) 板端Linux下視訊TCP傳送 & Linux上位機QT視訊顯示

前面幾篇已經陸續講述了影象採集,傳輸,Linux系統搭建等,這一篇就講一下自制一個簡單的板端視訊傳送和Linux上位機視訊顯示客戶端。板端視訊傳送用Zedboard做視訊資料傳輸,我能想到的是兩條路,一條就是網口,一條就是USB,USB傳輸方式打算以後研究一下,用網口是比較熟

嵌入式 修改u-bootLinux除錯串列埠以及檔案系統顯示終端串列埠

1.背景         近期一個專案,使用TI Cortex-A8的晶片AM3517作為主控開發。前期使用北京瑞泰公司的ICETEK-AM3517-KB核心板搭建開發環境。在自己做底板布板的時候的時候塗個佈線方便,改用UART1作為除錯串列埠,而原來瑞泰給的開發包,已

嵌入式Linux截圖工具gsnap移植分析【轉】

ram creat 嵌入式linux mbed 生活 rip 改變 因此 sig 轉自:http://blog.csdn.net/lu_embedded/article/details/53934184 版權聲明:開心源自分享,快樂源於生活 —&mdash

嵌入式Linux下Qt的中文顯示

tdi IT too file ron main.c nts 環境變量 copy 一般情況下,嵌入式Qt界面需要中文顯示,下面總結自己在項目中用到的可行的辦法 1,下載一種中文簡體字體,比如我用的是”方正準圓簡體“,把字體文件放在ARM開發板系統的Qt字庫中,即/usr/l

基於ARM和Linux嵌入式Web Server設計實現_愛學術——免費下載

重要 image 平臺 服務 linu amp 設計與實現 體系 www. 【摘要】介紹了嵌入式ARM處理器的特點和硬件平臺的設計、嵌入式操作系統的設計,構建了基於嵌入式Web Server的遠程監測系統結構,重點分析了嵌入式TCP/IP協議棧的體系結構、嵌入式Web服務器

OpenCV例程之基本影象讀入顯示

OpenCV是Intel®開源計算機視覺庫。它由一系列 C 函式和少量 C++ 類構成,實現了影象處理和計算機視覺方面的很多通用演算法。 1.  OpenCV與數字影象 在使用OpenCV做視覺或數字影象預處理時,需要讀入相機採集來的影象或視訊資訊。影象資料的獲取主要有以下

[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現設計【2018年給力專案】

[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現與設計【2018年給力專案】是【創科之龍】團隊aiku嵌入式視訊教程系列製作的現有的音樂播放器。 主要功能實現: 1.新建工程,基類選擇Qwidget。雙擊開啟介面檔案,在介面檔案中建立label顯示時間、若干個tool