• 终端_传感器_摄像头驱动和图片编码格式


    摄像头驱动

    Linux Driver是在内核模式下获取硬件信息,反馈到用户模式下。
         并提供在用户模式下控制内核模式下才能访问的硬件的途径(ioctl)。
    ROS Driver则不同,它完全是在用户模式下,
        从Linux层面获取数据。并通过Topic发送Message
    	 使得其它ROS Node可以通过topic得到信息的程序。
    usb_cam 就是个典型的ROS Driver. 
         usb_cam 只是个应用程序,通过V4L2接口设置Camera并获取数据, 
    	 利用ROS接口发布Topic,供其它Node实用.
    	   V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动
    	      摄像头在/dev/video*下,如果只有一个视频设备,通常为/dev/video0
    		  UVC 全称为USB Video Class,即:USB视频类,是一种为USB视频捕获设备定义的协议标准。
         使用USB摄像头的时候
            摄像头驱动节点,以及获取图像并显示节点;
              同时涉及到一个主题,这两个节点通过这个主题来进行交互
    

    代码分析

    src/usb_cam.cpp 最终产生libusb_cam.so, 
         它使用V4L2 接口访问Camera,并提供一些必要的格式转换工具
    nodes/usb_cam_node.cpp 最终产生usb_cam_nodd	 
         publishe Image 使用格式为:sensor_msgs::Image.
     可以    使用 image_transport  库去传输压缩格式 Image。
    

    摄像头输出格式

    摄像头能够输出的格式 yuyv  uyvy mjpeg 格式
    标定的内容包括三部分:内参,外参还有畸变参数
    摄像头多路同步触发采集
    

    视频驱动

    系统存在video4linux文件夹说明已安装过视频驱动,video4linux目录下每个链接文件代表一个视频设备
      ls /sys/class/video4linux/
    

    查看摄像头是否已经挂载的命令

    linux下usb摄像头操作,离不开v4l2框架
    V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。
       在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下
       
       查看linux 摄像头设备,如果存在有效的摄像头设备,则可以在dev目录下查看
        ls dev/video* -l
    	或者: 
    	   dmesg | grep video
    	   
     占用端口以及实际有相应的设备的关系
    

    格式说明

    格式存储相机种类	图像格式	细分	说明
        黑白相机	Mono	Mono8、Mono10、Mono12,Mono10 Packed、Mono12 Packed	
        彩色相机	Bayer	Bayer8、Bayer10、Bayer12 、Bayer10 Packed、Bayer12 Packed	
        彩色相机	YUV	YUV 422 (YUYV) Packed、YUV 422 Packed	
        彩色相机	RGB	RGB8 Packed、BGR8 Packed	两者的区别就是R、B排列是相反的
    

    相机格式

    [GenAPI|ROS] image encodings: 
     ['Mono8'|'mono8'] 
     ['BayerRG8'|'bayer_rggb8'] 
     ['BayerRG12'|'bayer_rggb16'] 
     ['BayerRG12Packed'|'NO_ROS_EQUIVALENT'] 
     ['YUV422Packed'|'yuv422'] 
     ['YUV422_YUYV_Packed'|'NO_ROS_EQUIVALENT']
    

    工业相机成像有黑白(gm)与彩色(gc)两种,

    分别为两种不同的像素存储格式
    灰度图存储中一个像素点表示了其灰度值,灰度图像素使用 Mono 格式存储
    彩色图使用的是BayerRG格式,其中通过红绿蓝三种像素点的排列输出彩色图像。

    1.Mono:
       mono8,就是2^8=256灰阶,因此你看见的黑白mono8图像,灰度值范围时0-255
       mono10,mono12分别是2^10、 2^12, 图像灰度值范围0-1024、0-4096
      mono10、mono12:分别代表10位、12位黑白图像,在内存中以16位数据存储,不够的数据位填0补充
      Mono10 Packed、Mono12 Packed:这种数据跟上面的mono10、mono12没有本质上的区别,
        差异就是,在数据排列上面,16位数据存储,原来补0的位置,被下一帧图像数据填充,
    	这样的好处就是节约了传输带宽,坏处就是小小的增加了解码的难度
    
    2.bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发明的
     当Image Sensor往外逐行输出数据时,
        如果偶数行(以0开始)为 BGBGBG......,则奇数行为GRGRGR......,即像素总是交错排列,
        像素的序列为GRGRGR.../BGBGBG...(顺序RGB)
     Bayer格式与BGR的转换:
     Bayer分为BayerRG、BayerBG、BayerGB、BayerBG
         在OpenCV中,对以上这4种排列,取排列名称的每行的前两位字母连着读,OpenCV定义为4种格式,分别为:
         BGGR排列 -> BG格式
         RGGB排列 -> RG格式
         GRBG排列 -> GB格式
         GBRG排列 -> GR格式
    
    3.YUV是由bayer数据先转化为RGB,然后RGB转化为YUV数据得到的,其中Y代表亮度值
      数据排列分别是UYVY、与YUYV两种,它们都是16位存储的,Packed就是数据填充方式
      YUV 422 Packed、 -----》 UYVY
      YUV 422 (YUYV) Packed:---》 YUYV
     YUV格式有两大类:planar和packed。
       01.平面格式(planarformats) 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
       02.紧缩格式(packedformats 对于packed的YUV格式,每个像素点的Y,U,V是连续交替存储的。
      YUV 色彩空间实际上是把一幅彩色的图片分成了一个表示暗亮程度的
        亮度信号(Luminance)Y,和两个表示颜色的UV分别表示色度(Chrominance)和浓度(Chroma)
       YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。		
      
    
    4.OpenCV中对RGB图像数据的存储顺序是BGR
    

    颜色空间

      RGB 的局限性  RGB模式是一种屏幕显示发光的色彩模式
      HSV 颜色空间  Hue(色调、色相) Saturation(饱和度、色彩纯净度) Value(明度)
      HSL 颜色空间  hue(色相)、saturation(饱和度)、lightness(亮度)。
    

    印刷色彩模式-CMYK模式是减色模式

    印刷四色模式是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,
    形成所谓“全彩印刷”。四种标准颜色是:
        C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’;
        M:Magenta = 品红色,又称为‘洋红色’;
        Y:Yellow = 黄色;
        K:blacK=黑色
    Advance Photo System 先进进摄影系统
       摄影者在拍摄时,可以设置标准(C 2:3),高清电视(H 9:16),全景 (P 1:3)三种取景框设置,
       这个设置也会存储在胶片中,冲洗时可以自动冲洗出4*6,4*7,4*11三种不同规格的相片
    

    参考

     海康彩色工业相机图像格式转换方法(Bayer转RGB) https://blog.csdn.net/qq_23107577/article/details/113258116
  • 相关阅读:
    uva 442 Matrix Chain Multiplication
    结对编程项目之队友代码分析
    [转] 为什么要使用NoSQL
    Compare Linq2Sql with NHibernate
    使用linq2sql 的DetailView 如何保存多对多关系
    工作流入门
    XML字段的用处
    DesignTimeResourceProviderFactory 不给力啊
    如何给XMLDatasource做分页和排序
    ORM的烦恼
  • 原文地址:https://www.cnblogs.com/ytwang/p/16521442.html
Copyright © 2020-2023  润新知