1.图像处理知识
1.1什么是像素和分辨率
感光元件是有很多个感光点构成的,比如有640*480个点,每个点就是一个像素,把每个点的像素收集整理起来,就是一副图片,那么这张图片的分辨率就是640*480:
1.2什么是帧率
帧率(FPS)就是每秒钟处理的图片数量,如果超过20帧,人眼就基本分辨不出卡顿。当然,如果用在机器上,帧率是越高越好的,OpenMV的最大帧率对比:
注:没有标注均为不传输图像给IDE,因为这个过程很耗费时间。
1.3颜色
RGB三原色
三原色的原理不是物理原因,而是由于人的生理原因造成的。人的眼睛内有几种辨别颜色的锥形感光细胞,分别对黄绿色、绿色和蓝紫色(或称紫罗兰色)的光最敏感(波长分别为564、534和420纳米)。所以RGB经常用于显示器上,用来显示图片。
LAB亮度对比度
Lab颜色空间中,L亮度;a的正数代表红色,负端代表绿色;b的正数代表黄色,负端代表兰色。不像RGB和CMYK色彩空间,Lab颜色被设计来接近人类视觉。
因此L分量可以调整亮度对,修改a和b分量的输出色阶来做精确的颜色平衡。
注意:在OpenMV的查找色块的算法中,运用的就是这个LAB模式!
1.4镜头畸变和焦距
镜头的畸变,因为光学原理,在感光芯片上不同的位置,与镜头的距离不同的,简单说就是近大远小,所以在边缘会出现鱼眼效果(桶型畸变)。为了解决这个问题,可以在代码中使用算法来矫正畸变,注:OpenMV中使用image.lens_corr(1.8)来矫正2.8mm焦距的镜头。
镜头焦距:是指镜头光学后主点到焦点的距离,是镜头的重要性能指标。镜头焦距的长短决定着拍摄的成像大小,视场角大小,景深大小和画面的透视强弱。当对同一距离远的同一个被摄目标拍摄时,镜头焦距长的所成的象大,镜头焦距短的所成的象小。注意焦距越长,视角越小。
2.OpenMV图像基本处理方法
2.1感光元件
sensor模块,用于设置感光元件的参数。
举个例子:
import sensor#引入感光元件的模块
# 设置摄像头
sensor.reset()#初始化感光元件
sensor.set_pixformat(sensor.RGB565)#设置为彩色
sensor.set_framesize(sensor.QVGA)#设置图像的大小
sensor.skip_frames()#跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。
# 一直拍照
while(True):
img = sensor.snapshot()#拍摄一张照片,img为一个image对象
2.1.1初始化
- sensor.reset() 初始化感光元件
2.1.2设置彩色/黑白
- sensor.set_pixformat() 设置像素模式。
- sensor.GRAYSCALE: 灰度,每个像素8bit。
- sensor.RGB565: 彩色,每个像素16bit。
比如将图像设置为黑白:
sensor.set_pixformat(sensor.GRAYSCALE)#设置为黑白
2.1.3设置图像分辨率(图像大小)
- sensor.set_framesize() 设置图像的大小
- sensor.QQCIF: 88x72
- sensor.QCIF: 176x144
- sensor.CIF: 352x288
- sensor.QQSIF: 88x60
- sensor.QSIF: 176x120
- sensor.SIF: 352x240
- sensor.QQQQVGA: 40x30
- sensor.QQQVGA: 80x60
- sensor.QQVGA: 160x120
- sensor.QVGA: 320x240
- sensor.VGA: 640x480
- sensor.HQQQVGA: 80x40
- sensor.HQQVGA: 160x80
- sensor.HQVGA: 240x160
- sensor.B64X32: 64x32 (用于帧差异 image.find_displacement())
- sensor.B64X64: 64x64 用于帧差异 image.find_displacement())
- sensor.B128X64: 128x64 (用于帧差异 image.find_displacement())
- sensor.B128X128: 128x128 (用于帧差异 image.find_displacement())
- sensor.LCD: 128x160 (用于LCD扩展板)
- sensor.QQVGA2: 128x160 (用于LCD扩展板)
- sensor.WVGA: 720x480 (用于 MT9V034)
- sensor.WVGA2:752x480 (用于 MT9V034)
- sensor.SVGA: 800x600 (仅用于 OV5640 感光元件)
- sensor.XGA: 1024x768 (仅用于 OV5640 感光元件)
- sensor.SXGA: 1280x1024 (仅用于 OV5640 感光元件)
- sensor.UXGA: 1600x1200 (仅用于 OV5640 感光元件)
- sensor.HD: 1280x720 (仅用于 OV5640 感光元件)
- sensor.FHD: 1920x1080 (仅用于 OV5640 感光元件)
- sensor.QHD: 2560x1440 (仅用于 OV5640 感光元件)
- sensor.QXGA: 2048x1536 (仅用于 OV5640 感光元件)
- sensor.WQXGA: 2560x1600 (仅用于 OV5640 感光元件)
- sensor.WQXGA2: 2592x1944 (仅用于 OV5640 感光元件)
比如设置图像像素为 :320x240
sensor.set_framesize(sensor.QVGA)#设置图像的大小
不设置参数时返回像素大小
2.1.4跳过一些图片
sensor.skip_frames([n, time])
使用 n
个快照,让相机图像在改变相机设置后稳定下来。 n
作为普通参数传输, 例如: skip_frames(10)
跳过 10
帧。您应在改变相机设置后调用该函数。
或者,您可通过关键字参数 time
来跳过几毫秒的帧数,例如: kip_frames(time = 2000)
,跳过2000毫秒的帧。
若 n
和 time
皆未指定,该方法跳过300毫秒的帧。
若二者皆指定,该方法会跳过 n
数量的帧,但将在 time
毫秒后超时。
2.1.5返回相机ID
2.1.6图像方向设置
水平镜像
sensor.set_hmirror(enable)
打开(True)或关闭(False)水平镜像模式。默认关闭。
垂直翻转
sensor.set_vflip(enable)
打开(True)或关闭(False)垂直翻转模式。默认关闭。
自动旋转
sensor.set_auto_rotation(enable)¶
打开自动旋转模式(True)或关闭(False)。默认为关闭。
2.1.7自动增益,白平衡,曝光,对比度,设置亮度等
-
sensor.set_auto_gain() 自动增益开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动增益。
-
sensor.set_auto_whitebal() 自动白平衡开启(True)或者关闭(False)。在使用颜色追踪时,需要关闭自动白平衡。
-
sensor.set_auto_exposure(enable[\, exposure_us])
- enable 打开(True)或关闭(False)自动曝光。默认打开。
- 如果 enable 为False, 则可以用 exposure_us 设置一个固定的曝光时间(以微秒为单位)。