最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

一種USB 攝像頭圖像采集與顯示的通用方法

出處:維庫電子市場網(wǎng) 發(fā)布于:2023-01-06 14:57:25

    目前市場上大部分的圖像采集與處理系統(tǒng)是基于DSP 芯片的,這種圖像采集與處理系統(tǒng)成本高、功耗高、體積約束等特點并不適用于一些簡單的應(yīng)用。隨著USB 攝像頭的普及和基于ARM 的嵌入式芯片的快速發(fā)展,將二者結(jié)合的便攜性越來越受人們歡迎。本文介紹了一種基于三星S3C2440A 芯片的嵌入式USB 攝像頭圖像采集與顯示方案,該方案具有良好的可移植性和擴展性,并且成本、大小和實時處理都能夠滿足市場需求。
    1 系統(tǒng)架構(gòu)
    系統(tǒng)通過當前市場上應(yīng)用廣泛的中芯微公司生產(chǎn)的zc301p 芯片的USB 攝像頭進行圖像采集,然后將圖像信息傳送到ARM 芯片中進行處理,終通過基于Qt/Embedded 編寫的圖形顯示程序在LCD 上實時顯示。系統(tǒng)的整體架構(gòu)如圖1 所示。

 

    2 視頻圖像采集
    系統(tǒng)采用中芯微公司生產(chǎn)的zc301p 芯片的USB 攝像頭作為圖像采集設(shè)備,并介紹了基于Video4Linux 編程協(xié)議進行視頻圖像采集的一般過程。
    2.1 USB 攝像頭驅(qū)動
    Linux 內(nèi)核能夠很好地支持OHCI(開放式主機控制接口協(xié)議),并且能夠很好地支持包括OV511系列攝像頭在內(nèi)的各種各樣的USB 設(shè)備,但是并不包括zc301pUSB 攝像頭。直到后來2.6.27 版本左右的內(nèi)核中才增加了針對zc301 系列芯片的驅(qū)動,統(tǒng)稱為Linux UVC.本文采用的是Linux2.6.32.2 版本內(nèi)核,只需要對內(nèi)核進行簡單的配置,就可以實現(xiàn)功能了。
    在配置菜單選項中,設(shè)備驅(qū)動是重要的配置項。選擇的配置項如下:
    DevICe Drivers - - - >
    Multimedia devices - - - >
    Video For Linux
    Enable Video For Linux API 1(DEPRECAteD)
    Video capture adapters - - - >
    V4L USB devices - - - >
    USB Video Class (UVC)
    UVC input events device support
    GSPCA based webcams - - - >
    ZC3XXX USB CAMEra Driver
    USB ZC0301 [P]Image Processor and Control
    Chip support
    現(xiàn)在,內(nèi)核被配置成可以支持Video4Linux 的視頻接口,并且加入了支持zc301pUSB 攝像頭的驅(qū)動程序。
    2.2 基于Video4Linux 的視頻圖像采集程序設(shè)計
    Video4Linux(簡稱V4L)為目前市場常見的電視捕獲卡和并口及USB 口的攝像頭提供統(tǒng)一的編程接口。在Linux 內(nèi)核中它為用戶空間提供統(tǒng)一的編程接口,V4L 分為兩層:底層是音頻和視頻設(shè)備驅(qū)動程序的內(nèi)核;上層為系統(tǒng)提供一些API 接口信息。視頻圖像采集流程如圖2 所示。

    

    (1)打開視頻設(shè)備。
    在Linux 中視頻設(shè)備是被作為設(shè)備文件來執(zhí)行的,本文USB 攝像頭的設(shè)備文件名為/dev/video0.
    int my_v4l_open (char*dev,my_v4l_STruct*vd) 函數(shù)用于打開視頻設(shè)備并初始化攝像頭設(shè)備,該函數(shù)調(diào)用open 函數(shù)可以讀設(shè)備文件,成功返回設(shè)備描述符,失敗返回- 1.主要程序代碼如下:
    int my_v4l_open(char*dev,my_v4l_struct*vd){
    if((vd- >fd=open(vd- >videodevice,O_RDWR))= =- 1){
    printf(“ERROR opening V4L interface”);
    exit(1);}
    ……}
    (2)讀設(shè)備信息。
    int my_v4l_get_capability (my_v4l_struct*) 函數(shù)的功能是讀取設(shè)備基本信息, 它利用ioctl(vd_fd,VIDIOCGCAP,&(vd- >capability) 來讀取有關(guān)攝像頭的信息。該函數(shù)成功返回后將這些信息從內(nèi)核空間拷貝到用戶程序空間capability 各成員分量中,使用printf 函數(shù)就可得到各成員分量信息。具體如下:
    int my_v4l_get_capability(my_v4l_struct*){
    if(ioctl(vd- >fd,VIDIOCGPICT,&(vd- >capability)) printf(“error:v4l_get_capabilityn”);
    exit(1);}
    return 0;}
    (3)視頻圖像采集。
    本文通過mmap 方式來采集視頻圖像信息。為了獲得映射的幀緩沖信息,my_v4l_mmap_init(my_v4l_struct*)函數(shù)需先初始化緩沖區(qū),并進行內(nèi)存與緩沖區(qū)的綁定,其中函數(shù)mmap 用于將文件fd與video_mbuf 綁定實現(xiàn)映射,函數(shù)mmap()返回值是系統(tǒng)實際分配的起始地址。函數(shù)my_v4l_mmap_init()的部分代碼實現(xiàn)如下:
    void my_v4l_mmap_init(my_v4l_struct*vd){
    ……
    ioctl(vd- >fd,VIDIOCGMBUF,&(vd- >mbuf));// 初始化video_mbuf 以得到所映射的buffer的信息
    vd- >pframebuffer= (unsigned char*)mmap (0,
    vd- >videombuf.size,
    PROT_READ|PROT_WRITE,MAP_SHARED,vd- >fd,0);
    /* 把文件fd 與video_mbuf 綁定,實現(xiàn)映射*/
    vd- >mmapsize=vd- >videombuf.size;
    vd- >vmmap.height=vd- >HDRheight;
    vd- >vmmap.width=vd- >hdrwidth;
    vd- >vmmap.format=vd- >formaTIn;
    vd- >vmmap.frame=0;
    ……}
    然后利用驅(qū)動程序的ioctl () 函數(shù)的VIDIOCMCCAPTURE 和VIDIOCSYNC 命令來獲取圖像。其中ioctl (vd- >fd,VIDIOCMCAPTURE,&(vd- >mmap)) 開始一幀圖像的采集,是非阻塞的;ioctl(vd- >fd,VIDIOCSYNC,&frame)用于判斷一幀圖像采集過程結(jié)束與否,frame 是當前采集的幀的序號。
    采集工作結(jié)束后調(diào)用munmap 取消文件fd 與video_mbuf 的綁定。
    munmap(vd- >map,vd- >mbuf.size);
    (4)關(guān)閉設(shè)備在視頻采集完成后,必需關(guān)閉視頻設(shè)備。
    close(vd- >fd);
    3 基于Qt/Embedded 圖像顯示程序的編寫
    基于嵌入式Linux 常見的GUI 系統(tǒng)有MiniGUI、MicroWindows、OpenGUI和基于Framebuffer[5]的Qt/Embedded[4].Qt 是諾基亞開發(fā)的一個跨平臺的C 圖形用戶界面應(yīng)用程序框架,它提供給應(yīng)用程序開發(fā)者建立藝術(shù)級的圖形用戶界面所需的功能,并且是完全面向?qū)ο蟮模苋菀讛U展,允許真正的組件編程。正是基于以上優(yōu)點,本文采用Qt/Embedded 開發(fā)平臺,并將基于Qt 的圖形界面Qtopia 移入我們的文件系統(tǒng)中。
    為了避免由于圖像數(shù)據(jù)量大而在目標板上顯示閃爍的問題,本文采用雙緩沖技術(shù)實現(xiàn)采集圖像顯示,采用的是QPixmap 對象。QPixmap 是Qt 為圖像處理提供的類,主要用于圖像的繪制。實現(xiàn)雙緩沖時,先把要顯示的內(nèi)容繪制在這個QPixmap pixmap 對象上,然后再用一步操作把pixmap 繪制在屏幕上?;赒t 圖像顯示及輔助框線繪制的部分代碼段如下:
    QPixmap pix (width (),height ());// 定義一個QPixmap 用于在上面繪制圖像及框線
    QPainter p(&pix);// 定義繪制工具
    QPainterQPen pen (yellow,3,DotLine);// 定義一個畫筆的屬性,如顏色、粗細、線條樣式
    p.drawImage (0,0,img);// 把攝像頭采集到的圖像繪制到QPixmap 上
    p.setPen(pen);// 設(shè)置畫筆屬性
    p.moveTo(50,330);// 設(shè)置畫筆筆尖起始位置
    p.lineTo(150,50);// 開始繪制框線
    p.lineTo(490,50);
    …略
    p.end();// 在QPixmap 上的所有繪制任務(wù)結(jié)束
    p.begin(this );// 準備把QPixmap 繪制到屏幕上
    p.drawPixmap (0,0,pix);// 繪制QPixmap 到屏幕操作,圖像顯示到LCD 上
    圖像數(shù)據(jù)的連續(xù)采集和顯示是通過定時器實現(xiàn)的,QTimer 類提供了定時器信號和單觸發(fā)定時器。設(shè)置定時啟動觸發(fā)周期,每當定時器時間到就觸發(fā)一個定時器事件,在事件中調(diào)用VIDIOCMCAPTURE 函數(shù)完成對圖像的采集,并通過QPixmap 類將圖像顯示到LCD上。至此就可以通過基于Qt 編寫的圖形界面程序,將USB 攝像頭采集的視頻圖像在LCD 上實時顯示。
    4 結(jié)論
    本文基于ARM9 處理器和嵌入式Linux 操作系統(tǒng),詳細介紹了一種USB 攝像頭圖像采集與顯示的通用方法。Linux 代碼完全開源,系統(tǒng)具有良好的移植性,可方便地進行各種擴展,采用Qt 進行人機界面的設(shè)計能夠極大地節(jié)省開發(fā)成本和周期。本方案經(jīng)推廣可用于工業(yè)控制、智能交通、小區(qū)監(jiān)控等領(lǐng)域。
關(guān)鍵詞:USB 攝像  

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://udpf.com.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!