海康工业相机排雷笔记02-像素格式解析
工业相机使用过程记录
02-像素格式解析
通过将相机输出图像裸数据raw格式直接存图,并使用Notepad++中的HEX-Edit插件查看数据内容。
一、黑白/Mono
直接使用相机测试相机图像存图:
图像中各部分灰度分别为:0、36、73、109、146、182、219、255,以灰度73列为例
(1)Mono 8
该列图像数据为十六进制49,十进制为73,那么Mono 8就是每个像素点占8bit,依次排列。
(2)Mono 10
该列图像数据为十六进制2401,由于相机均为小端数据,实际数据应解析为0124,十进制为292=734,那么Mono 10格式为每个像素点占16bit,但是只有10bit为有效数据。
(3)Mono 10 Packed
Mono 10 Packed像素格式为了节省空间,将10bit数据存储在12bit的内存空间中,剩余2bit为0,那么每24bit数据中包含两个像素点的灰度信息,也就是说49 00 49中存在两个相同灰度像素点的信息,转换为二进制就是0100 1001 0000 00 00 0100 1001,中间8bit存储的是这两个像素点的低2位的信息,那么该像素点灰度应该为0100 1001 00,转换为十进制就是292=734,与Mono 10格式的结果相同。
(4)Mono 12
Mono 12与Mono 10类似,12bit数据占据16bit空间,92 04解析为4 92,十进制为1170,1170/16=73。
(5)Mono 12 Packed
参考Mono 10 Packed的结果,Mono 12 Packed就应该解析成49 22 49,像素灰度应为492,十进制为1170,与Mono 12格式结果相同。
二、彩色
仍然使用相机测试图像进行存图:
以粉色条纹(R:255 G:0 B:255)为例:
(1)Bayer
Bayer格式为大多数彩色工业相机的源数据格式,其他像素格式一般为Bayer格式插值得到。
Bayer格式的存储方式与Mono格式基本一致,差别仅仅在于Mono格式每个像素点存储的是该像素点的灰度信息,而Bayer格式每个像素点存储的是该像素点的某一个分量(RGB)的值。
我使用的是Bayer GR,那么他的像素排布就是第一行GRGRGRGRGR…,第二行BGBGBGBG…,以此类推。
Bayer GR 8选取两行数据的连接位置:
第一行GR排列,符合0、255、0、255的规律
第二行BG排列,也符合255、0、255、0的规律
那么Bayer 10/Bayer 10 Packed/Bayer 12/Bayer 12 Packed同理,此处不再赘述。
(2)RGB 8/BGR 8
RGB和BGR格式是最容易理解的像素格式,每个像素点占据连续的24bit空间,其中R、G、B三个分量分别占有8bit,排列方式也非常简单:
RGB 8格式就是R1 G1 B1 R2 G2 B2…
那么BGR 8格式就是把RB两分量调换位置,即B1 G1 R1 B2 G2 R2…
(3)YUV
相机提供了YUV格式中的两种:YUV 422 Packed(实际排列方式为UYVY)、YUV 422 (YUYV) Packed(实际排列方式为YUYV)
此处以YUYV方式为例
像素排列方式为Y1 U1 Y2 V2 Y3 U3 Y4 V4…
每个像素点拥有一个Y分量,每两个像素点共用一个V分量,也就是说Y分量为68,十进制就是104;U分量为DE,十进制为222;V分量为EB,十进制为235。
随便找了个转换公式:
R= Y + ((360 * (V - 128))>>8) =254
G= Y - (( ( 88 * (U - 128) + 184 * (V - 128)) )>>8) =0
B= Y +((455 * (U - 128))>>8) =255
基本符合粉色条纹的RGB分量
实测发现UYVY的方式与YUYV方式仅仅是排列顺序不同,不再赘述。
PS:
Packed在彩色图像中一般表示为各分量交织存储的打包格式比如RGBRGBRGB,Planar一般为分量分别存储的平面格式RRRGGGBBB。
Packed在黑白图像中一般Packed表示节省空间的打包方式,比如12bit数据存储在16bit空间中,剩余的4bit由下一个像素点的4bit填充。
海康工业相机排雷笔记02-像素格式解析相关推荐
- 海康工业相机排雷笔记-01-分辨率设置
第一次使用海康工业相机,记录下自己踩过的坑 01-相机分辨率设置 项目原因借测了一台0.3MP分辨率的海康相机,在学习SDK的过程中发现设置相机的分辨率会失败. 相机原分辨率640×480,设置成37 ...
- 海康工业相机排雷笔记04-工业相机取图流程
在刚开始使用工业相机时,大多数人(包括我)可能都会误认为工业相机二次开发中的取图过程就是把图像数据从相机内部的寄存器中拿到内存中,这也会对取图过程及耗时等方面产生很多误解,下面会简单叙述下我个人的理解 ...
- 海康工业相机SDK错误码常见场景解析
在使用SDK二次开发过程中,接口的调用往往会遇到较多的错误,sdk错误码能够帮助我们快速分析错误原因,解决问题,针对常见的错误码,下面给出一下常见的问题原因,供大家分析 1.MV_OK 0x00000 ...
- 海康工业相机 python 图像数据转opencv格式
python调用海康工业相机,官方给出的SDK里没有转到opencv格式的例子,网上找了下,只有一篇,转换部分的代码如下: temp = np.asarray(pData2) # 将c_ubyte_A ...
- 使用海康工业相机的心路历程(一)
加入新公司做项目.之前做的项目里面用到的视觉产品还都是国外的品牌,比如basler.不得不说国外的视觉产品的稳定性和易用性真的好.第一次接触到国内的工业相机,公司选择了海康威视这个品牌.在做第一次测试 ...
- (二)Qt多线程实现海康工业相机图像实时采集
系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...
- (一)Qt+OpenCV调用海康工业相机SDK示例开发
系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 文章目录 系列文章目录 ...
- python语言下使用pyqt中的QImage对海康工业相机获取到的图像进行显示
系列文章目录 文章目录 目录 系列文章目录 文章目录 前言 二.使用海康工业相机API接口GetImagebuffer配合pyqt中的QImage类进行界面显示 1.海康工业相机API接口GetIma ...
- 2022-05-16 Python OpenCV 海康工业相机
背景 Python OpenCV连接海康工业相机做图像处理 环境 Python:3.9.9 OpenCV:4.5.5 numpy:1.19.3 2022-05-16_112138.png 相机 海康: ...
最新文章
- 基于xampp搭建的个人博客。
- redis主从复制原理、断点续传、无磁盘化复制、过期key处理
- SSRF,以weblogic为案例
- jxl创Excel档java示例代码说明
- MyGameDemo:打砖块
- 怎么用wifi进e站_忘记wifi密码怎么办,用这招可以知道电脑中的wifi密码
- Ubuntu安装谷歌浏览器
- Java多线程编程模式实战指南一:Active Object模式
- Chrome 插件收集
- 拳头产品|海泰虎讯,新一代安全即时通讯系统
- 一个数据存取类的代码,请高手帮忙分析和指定是否有误!
- tensorflow使用GPU加速
- Python合并不同数量的Excel单元格
- 如何在shell脚本中定义数组及遍历
- 大前端 - react- 服务端渲染 - Gatsby
- 【Linux】alias及设置
- 从零开始构建自己的WebGL3D引擎---思考与设计
- 经济学“边际效应”VS根正苗红的RPA
- 5个自学网络安全的网站,全是技术干货!
- Carsim 与 Simulink 联合仿真用到的ABS.mdl模型文件