新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于S3C44B0開(kāi)發(fā)板的圖像采集方法研究

        基于S3C44B0開(kāi)發(fā)板的圖像采集方法研究

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


        程序詳細(xì)流程如下:

        65.jpg

        網(wǎng)眼V3000攝像頭支持depth=24,palette=VIDEO_PALETTE_RGB24,輸出圖片為BMP格式,因此在程序中需要對(duì)BMP的格式進(jìn)行定義。

        BMP格式包括位圖文件頭:struct tatBITMAPFILEHEADER

        位圖信息頭:struct tagBITMAPINFOHEADER

        彩色表:struct tagRGBQUAD,

        需要說(shuō)明的是,BMP格式的數(shù)據(jù)陣列存儲(chǔ)的掃描行是由下往上存儲(chǔ)的,即第一個(gè)像素在左下角,最后一個(gè)像素在右上角,因此在讀取的時(shí)候要注意。
        (1)用read()方法獲取圖片,將圖片數(shù)據(jù)直接讀到用戶(hù)內(nèi)存空間,然后寫(xiě)入文件。
        read(fd,data,size); //將fd所指位置size大小的數(shù)據(jù)讀寫(xiě)到data內(nèi)存空間
        fwrite(bf,14,1,fp); //BMP文件頭信息寫(xiě)入文件
        fwrite(bi,40,1,fp); //BMP位圖信息頭信息寫(xiě)入文件
        fwrite(buffer,ImageSize,1,fp); //圖片寫(xiě)入文件

        (2)用mmap()內(nèi)存映射方法,需要ioctl(fd,VIDIOCGMBUF,mbuf)獲取緩沖區(qū)的幀信息,調(diào)用mmap()函數(shù)把設(shè)備文件映射到內(nèi)存區(qū),這樣就可以把讀到的信息,讀寫(xiě)到文件里。內(nèi)存映射法加速了I/O的訪(fǎng)問(wèn)速度,它使得各進(jìn)程指向一塊共享內(nèi)存空間,各進(jìn)程可以隨時(shí)進(jìn)行訪(fǎng)問(wèn),因此內(nèi)存映射獲取圖片的方法速度要比read()方法快一些。
        //設(shè)置水平和垂直分辨率及、彩色顯示格式
        vmmap.height=height;
        vmmap.width=width;
        vmmap.format=VIDEO_PALETTE_RGB24;
        //調(diào)用mmap進(jìn)行內(nèi)存映射
        buffer=mmap(0,buf.size,PORT_READ|PORT_WRITE,MAP_SHARD,fd,0);
        picture.depth=24;
        ioctl(fd,VIDIOCSPICT,picture)
        //圖像
        if(ioctl(fd,VIDIOCMCAPTURE,vmmap)0)
        {perror(VIDIOCMCAPTURE);
        return 0;
        }
        //判斷是否完成
        if (ioctl(fd,VIDIOCSYNC,buf)0)
        perror(VIDIOCSYNC);



        評(píng)論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 丁青县| 明星| 江北区| 尚义县| 右玉县| 江津市| 全南县| 望奎县| 新晃| 灵宝市| 花莲县| 芮城县| 红原县| 东光县| 金昌市| 黎城县| 宁河县| 卢湾区| 乳源| 洪江市| 大厂| 云浮市| 定襄县| 博罗县| 兴山县| 鸡东县| 隆林| 昌乐县| 南乐县| 万山特区| 乳源| 锦屏县| 隆子县| 孝昌县| 枣强县| 马山县| 阳东县| 彰化县| 鹤壁市| 巫山县| 巴青县|