新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于S3C44B0開發板的圖像采集方法研究

        基于S3C44B0開發板的圖像采集方法研究

        作者: 時間:2012-04-13 來源:網絡 收藏


        程序詳細流程如下:

        65.jpg

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

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

        位圖信息頭:struct tagBITMAPINFOHEADER

        彩色表:struct tagRGBQUAD,

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

        (2)用mmap()內存映射方法,需要ioctl(fd,VIDIOCGMBUF,mbuf)獲取緩沖區的幀信息,調用mmap()函數把設備文件映射到內存區,這樣就可以把讀到的信息,讀寫到文件里。內存映射法加速了I/O的訪問速度,它使得各進程指向一塊共享內存空間,各進程可以隨時進行訪問,因此內存映射獲取圖片的方法速度要比read()方法快一些。
        //設置水平和垂直分辨率及、彩色顯示格式
        vmmap.height=height;
        vmmap.width=width;
        vmmap.format=VIDEO_PALETTE_RGB24;
        //調用mmap進行內存映射
        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);



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 朝阳区| 安塞县| 昌吉市| 聂荣县| 永登县| 南丰县| 井陉县| 绵阳市| 湘乡市| 昭觉县| 揭东县| 望谟县| 遂川县| 北安市| 镇宁| 无棣县| 靖宇县| 神木县| 龙江县| 翁源县| 乌兰县| 合肥市| 江津市| 三台县| 堆龙德庆县| 沈阳市| 宜都市| 神农架林区| 黑龙江省| 宁乡县| 嫩江县| 海盐县| 绥芬河市| 凉城县| 前郭尔| 阳东县| 宝应县| 探索| 天峨县| 长阳| 韶关市|