一:JPG库----》jpg或者jpeg图片-----》液晶
      jpg文件是有损的
      jpg是24位颜色图
    JPEG格式:经过压缩-----》使用算法还原回RGB
    JPEG压缩算法:开源的第三库
    
                      开源的第三方库
    经过压缩JPEG格式------------------》RGB------>lcd液晶屏幕
    
   1)下载飞秋的JPEG库:jpegsrc.v9a.tar.gz
   2) 把jpegsrc.v9a.tar.gz放置共享目录 
   3)在Ubuntu中,回到JPEG库所在的位置
       
          cd  /mnt/hgfs/linux/jpegsrc.v9a.tar.gz
          
   4)解压到家目录中
   
     tar zxvf  jpegsrc.v9a.tar.gz -C ~
     
     其中: 
          tar:解压或者压缩的命令
          z  :解压以.gz结尾的压缩包  j----》.bz2
          x  :解压                   c----》压缩
          v  :可见的方式进行解压(把解压缩的过程打印出来)
          f  :文件
          -C :指定你解压的路径
          ~  :指定解压到位置
          
   5)回到家目录下,看看是否解压成功
         回家目录  cd
                   ls-----》是否有jpeg-9a----》解压成功
   6)在家目录中创建一个新的目录,作为jpeg库安装
          回家目录 cd
           mkdir   jpg
           chmod  777 jpg
    7)切换到解压后目录
       
          cd  ~/jpeg-9a
          
    8)配置
      ./configure  --host=arm-linux --prefix=/home/gec/jpg
     
    9)编译
       make
    
    10)安装
       make install

11)检查是否安装成功
          cd ~/jpg
          ls          
          
          bin:二进制文件
          include:头文件
         
         jconfig.h  jerror.h  jmorecfg.h  jpeglib.
          
          lib:库文件
           
            libjpeg.so.9.1.0----》jpeg算法库
        
          share:帮助文档
          
    12)下载飞秋的jpeg_show.c文件
           jpeg开放源码:jpeg_show.c
           
    13)把jpeg_show.c放置到共享目录
    
    14)去Ubuntu中,回到jpeg_show.c所在路径下面
       
         cd  /mnt/hgfs/linux/
    
    15)编译工程
     arm-linux-gcc jpeg_show.c -o jpeg_show 
     -I /home/gec/jpg/include -L /home/gec/jpg/lib/ -ljpeg
    
        arm-linux-gcc jpeg_show.c -o jpeg_show  编译命令
        -I /home/gec/jpg/include :指定头文件的路径
        -L /home/gec/jpg/lib/    :指定库文件的路径
        -ljpeg                     :指定链接库jpeg
        
    
    16)把jpeg_show拷贝到开发板中
        
           rx 
    
    17)修改权限
            chmod

18)执行
         ./jpeg_show 1.jpg

[root@GEC6818 /]#./jpeg_show 1.jpg 
   ./jpeg_show: error while loading shared libraries:
    libjpeg.so.9: cannot open shared object file:
    No such file or directory      
         解决方案:把libjpeg.so.9.1.0 下载到开发板
    
    19)先拷贝libjpeg.so.9.1.0到共享目录
    
    20)将库拷贝到CRT当中去;
          
          mv libjpeg.so.9.1.0 /lib
          
          并且将名字改为libjpeg.so.9
          
    21)重新执行工程

===================摄像头=====================
1.在linux中那些常用的应用设备
  液晶显示屏幕、键盘、鼠标、触摸屏、摄像头、U盘等
  linux前辈设计很多的模型
       1.方便我们去调用驱动
       2.按部就班的操作
       
=============================================
2.由于这种原因我们在写的时候就可以按照模型的“套路”
   头文件指定库指定我们需要的路径
   宏定义包含了所有的状态
   函数主体
         1.打开文件(open 驱动)
         2.代码功能模块
         3.关闭文件
         
=============================================
3.linux当中有关视频类的设备------》摄像头  统一的架构(V4l2)
  使程序有发现设备和操作设备的能力。
  它主要用一系列的函数实现我们想要的功能。
  像设置摄像头的参数、帧频、视频压缩格式和图像参数等。
  当然统一的架构只能在linux操作系统
      linux系统中有一个头文件和V4L2架构是相关的
        vi /usr/include/linux/videodev2.h 
        
=============================================
4.帧捕捉画面
  帧——就是影像动画中最小单位的单幅影像画面,
  相当于电影胶片上的每一格镜头。 
  一帧就是一副静止的画面,连续的帧就形成动画
  
=============================================
5.摄像头操作流程:
    1.打开设备文件。 int fd=open("/dev/video7",O_RDWR);
                 注意(等开发板开启之后在插摄像touch)
    
    2. 取得设备的capability,看看设备具有什么功能,
    比如是否具有视频输入,或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability(可选)
    
    3. 选择视频输入,一个视频设备可以有多个视频输入。VIDIOC_S_INPUT,struct v4l2_input
    
    4. 设置视频的制式和帧格式,制式包括PAL,NTSC,
      帧的格式个包括宽度和高度等。
    VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format
    
    5. 向驱动申请帧缓冲,一般不超过5个。
        struct v4l2_requestbuffers
        
    6. 将申请到的帧缓冲映射到用户空间,
       这样就可以直接操作采集到的帧了,而不必去复制。
    
    7. 将申请到的帧缓冲全部入队列,以便存放采集到的数据.
        VIDIOC_QBUF,struct v4l2_buffer
        
    8. 开始视频的采集。VIDIOC_STREAMON
       
    9. 出队列以取得已采集数据的帧缓冲,取得原始采集数据。
       VIDIOC_DQBUF
       
    10. 将缓冲重新入队列尾,这样可以循环采集。VIDIOC_QBUF
         
    11. 停止视频的采集。VIDIOC_STREAMOFF
    
    12. 关闭视频设备。close(fd);

=======================================
摄像头:
    1.驱动/dev/video7
    2.使用结构体
    typedef struct Frame_Buffer
    {
        char buf[1843200]; //摄像头捕捉的数据显示(jpg:600*480)
        int length;        //摄像头捕捉的数据大小    
    }FrameBuffer;

3.代码功能模块
     //初始化摄像头
     int linux_v4l2_device_init(const char *dev);

//开启摄像头捕捉
     int linux_v4l2_start_capturing();

//获取摄像头的画面
     int linux_v4l2_get_fream(FrameBuffer *freambuf);

//摄像头显示画面
     int show_video_data(unsigned int x,unsigned int y,
            char *pjpg_buf,unsigned int jpg_buf_size)  
      
     //摄像头暂停捕捉
      int linux_v4l2_stop_capturing();

//解除摄像头的初始化 
     int linux_v4l2_device_uinit();
    
====================================
头文件:
      什么时候用<.h>  头文件存在系统库里面
      什么时候用".h"  头文件不在系统库,根据当前目录查找
      
编译命令
   arm-linux-gcc *.c -o viode_show -L./jpeg -lapi_v4l2_arm -I./jpeg -ljpeg

github源代码

智能家居实训第八天 JPG库 和摄像头使用相关推荐

  1. 物联网智能家居实训系统

    物联网智能家居实训系统 产品型号和技术规格 系统概述 物联网智能家居实训系统,以智能家居行业为背景,对智能家居中多个子系统进行安装调试操作,培养学生的工程技能,使其能够搭建相对复杂的物联网应用系统,并 ...

  2. 智能家居实训第一天 嵌入式介绍 需求分析 开发环境 Linux基础知识

    ===========嵌入式===================== 走向:  软件  人机交互         内核  系统         硬件  单片机 C语言:51单片机   写代码---- ...

  3. 智能家居实训(华清远见)第三天

    内容:(课程主要内容,代码/作业,收获,感悟,建议等) 主要内容:(1)对昨天留下的作业进行讲解: (2)复习昨天讲解的知识 (3)讲解今天所需要的知识点以及操作步骤 #include <sys ...

  4. 智能家居实训第六天 音频 视频播放器

    ===============音频================= 一.手机如何播放音乐  1)播放器:   酷狗/QQ音乐/网易云  2)音乐类型: ***.MP3   二.gec6818的开发板 ...

  5. 智能家居实训(华清远见)第一天

    一.项目介绍 利用集成开发板,编写代码实现温湿度数据采集显示,摄像头采集图像,按键控制led小灯. 二.软件介绍 VMware.Qt 三.基本内容讲解 vim编辑器: 三种模式:命令行模式 插入模式 ...

  6. 智能家居实训(华清远见)第六天

    课程主要内容: (1)安装QT 编译软件: (2)学习软件的基本用法,创建工程文件 (3)了解软件中ui界面的组件及其属性用法. (4)代码编写以及运行:组件使用:图片显示:计算器:多页面跳转:定时器 ...

  7. stm32f302实现斩波控制步进电机_电子产品装调与智能检测实训考核装置

    SBGYD-185E型电子产品装调与智能检测实训考核装置 自购 双踪示波器YLDS1102D: 一.设备概述 电子产品装调与智能检测实训考核设备生产实际和职业岗位的技能要求按照职业院校的教学和实验实训 ...

  8. 智能楼宇实训室空间设计

    智能楼宇实训室空间设计案例 智能楼宇实训室分为理论教学区.智能化工程技术实训1区.智能化工程技术实训2区.停车场系统工程实训区.器材存放区四个部分,均为实物1:1建模. 包含公共广播实训装置.电工配线 ...

  9. 智能楼宇实训室建设方案

    智能楼宇实训室建设 智能楼宇管理是伴随着我国楼宇智能化而出现的朝阳职业,随着我国城市数字化.建筑智能化的进程日益加快,以及人们对居住环境的管理及服务要求的提高,导致了社会对智能楼宇管理专业人才的大量需 ...

最新文章

  1. Flutter开发之布局-1-Column(15)
  2. Daily Scrum 10.26
  3. echarts图例(legend)
  4. Required request body is missing 错误
  5. java final类的写法_重拾JavaSE基础——抽象类、接口、代码块、final和枚举
  6. .NET微服务最佳实践eShopOnContainers
  7. Liaoning Province--保三成功
  8. shell 命令自动识别系统升级内核、系统索引更新
  9. 【Kafka】Kafka创建Topic的时候提示WARNING: Due to limitations in metric names, topics with a period ('.')
  10. java 字符串排序_Java控制台输入字符串及字符串比较
  11. Delphi编写事件模型客户端(3)
  12. post接口请求测试,通俗易懂
  13. 台型计算机电源电路图,电脑ATX电源控制电路及原理
  14. 我从Python新手到大师的百天之路(内附学习资源)
  15. 疫情之下,这10个技巧助你开启云面试的正确姿势
  16. 小样本不符合正态_尿液样本HPV分型检测用于宫颈癌筛查的可能性
  17. [原创]网页中自动连续播放音乐文件的实现
  18. callee与caller的区别
  19. 小学生C++编程基础 课程20(共7题)
  20. Enhancement .

热门文章

  1. Oracle EBS应用产品-外币重估原则
  2. SQL Server 2000 + 2005 + 2008 + 2008R2,完全可以共存
  3. iPhone 12:旧的不去,新的也没来
  4. 面试官:分布式锁用Redis好?还是Zookeeper好?
  5. vlan与交换机端口模式Access,Hybrid,Trunk
  6. uniapp 引入vantUI
  7. webots-Controller Programming
  8. 沉浸式音视频互动要通过什么技术来实现?
  9. :root的用法注意
  10. python中时间日期相减并转化为秒