<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux 下基于A(yíng)RM920T 的USB 攝像頭圖像采集

Linux 下基于A(yíng)RM920T 的USB 攝像頭圖像采集

作者: 時(shí)間:2012-05-21 來(lái)源:網(wǎng)絡(luò ) 收藏

3.1圖像數據的采集過(guò)程:

第一步:要打開(kāi)攝像頭設備,而在下可以通過(guò)系統的設備文件來(lái)訪(fǎng)問(wèn)設備,在前面我們創(chuàng )建并建立了攝像頭的設備文件,所以文件描述符(dev)可以如下方法獲?。?P> while (max_try) {

dev = open (device, O_RDWR);

if (dev == -1) {

if (!--max_try) {

fprintf (stderr, "Can't open device %sn", device);

return (1);} /*max_try為試圖打開(kāi)設備的最多次數*/

sleep (1);

} else { break; }}

第二步:進(jìn)行訪(fǎng)問(wèn)攝像頭設備的狀態(tài)信息。

首先我們可以在kernel的源代碼中找到頭文件videodev.h,這個(gè)頭文件定義了我們要編寫(xiě)的應用程序的所有數據結構和函數。當然我們先要獲得攝像頭的信息,可以通過(guò)頭文件中的video_capability結構來(lái)了解攝像頭的性能。其函數接口是int v4l_check_size (int fd, int *width, int *height),讀出其中的單元可按如下方法,宏VIDIOCGCAP定義為 _IOR('v',1,struct video_capability)。

struct video_capability vid_caps;

if (ioctl (fd, VIDIOCGCAP, vid_caps) == -1) {

perror ("ioctl (VIDIOCGCAP)"); return -1;}

然后通過(guò)訪(fǎng)問(wèn)結構體vid_caps就可以讀出攝像頭可拍攝的圖片類(lèi)型、圖片的最大最小高度和寬度。

第三步:通過(guò)控制攝像頭來(lái)采集圖象數據。

實(shí)現函數為image = get_image (dev, width, height, palette, size),通過(guò)該函數可以將設備文件中的圖象數據的信息讀出來(lái),該函數的返回值image為圖片要存儲的格式,例如png、jpeg等。但這樣必須首先申請一塊足夠大的內存空間,我們是這樣完成的:

map = malloc (width * height * bytes);

len = read (dev, map, width * height * bytes);

if (len = 0) { free (map); return (NULL); }

這樣采集到的圖像數據就會(huì )先存到所分配到的內存空間中,然后進(jìn)行下一步的象素和圖片格式存儲處理。

第四步:按照預定的象素值和圖片格式來(lái)存儲圖像。

在驅動(dòng)程序向應用程序傳遞圖像數據是一個(gè)拷貝過(guò)程,所以應用程序在采集圖片數據時(shí),先將驅動(dòng)程序中圖片緩沖區中的數據拷貝到應用程序中,然后再控制和處理圖片數據。

if (palette == VIDEO_PALETTE_YUV420P) {

convmap = malloc ( width * height * bytes );

v4l_yuv420p2rgb (convmap, map, width, height, bytes * 8);

memcpy (map, convmap, (size_t) width * height * bytes);

free (convmap); }

這就是拷貝的過(guò)程,memcpy()為拷貝函數,v4l_yuv420p2rgb()函數用來(lái)將原生圖片轉換為RGB格式的圖像信息。然后通過(guò)前邊image的返回值來(lái)分別調用函數put_image_png,put_image_jpeg來(lái)生成相應格式的圖像信息。

3.2 通過(guò)QT編譯的圖片查看器查看攝像頭采集的圖像。

QT目前是在嵌入式領(lǐng)域中比較流行的圖形開(kāi)發(fā)工具,在我們的文件系統中,采用了基于QT的圖形界面Qtopia,以下是實(shí)現調用圖像信息的QT語(yǔ)句。第一句表示將圖片的路徑以及圖片的名字傳給pm1,然后通過(guò)Qlabel類(lèi)的pl傳出圖片給圖片查看器,從而實(shí)現了圖像信息的顯示。

QPixmap pm1("picture_path/picture_name");

Qlabel p1;

p1—>SetPixmap(pm1);

在采集的圖像數據中,可以自定義所存儲的圖片格式,大小及其像素,方便迅速,而Qtopia是基于QT的比較成熟的嵌入式圖形界面,利用其來(lái)顯示我們所采集的圖像數據效果良好。

4、結束語(yǔ)

本文詳細介紹了基于A(yíng)RM920T的嵌入式下的的硬件、軟件構建過(guò)程,可以靈活應用于基于嵌入式的各種電子產(chǎn)品中。由于所采用的軟件全部是開(kāi)放源碼而且免費獲得,所以對于需要便攜好而又要有較高的數據處理能力且成本要求嚴格的方面尤其適合。

本文作者創(chuàng )新點(diǎn):通用串行總線(xiàn)是一種非常實(shí)用的通信接口,其應用日益廣泛,而Linux+ARM9下USB設備的應用也逐漸完善;并且采用了具有永久性存儲功能的Yaffs文件系統,為客戶(hù)進(jìn)行實(shí)時(shí)處理圖像提供了方便;同時(shí)使用QT編譯的界面使圖像數據的采集更加人性化,這幾方面的結合使其必有很廣的市場(chǎng)前景。

參考文獻:

[1] SAMSUNG主頁(yè):http://www.samsungsemi.com/

[2]《基于A(yíng)RM-Linux 嵌入式系統引導程序的設計》劉晶晶《微計算機信息》2006第2-2期

[3]《構建嵌入式Linux系統》,Karim Yaghmour著(zhù),中國電力出版社

[4]《Linux設備驅動(dòng)程序(第三版),Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman著(zhù),魏永明等譯,中國電力出版社

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

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: USB攝像頭 Linux 圖像采集

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>