一、图像
1 设置彩色/黑白:
- sensor.set_pixformat() 设置像素模式。
- sensor.GRAYSCALE: 灰度,每个像素8bit。
- sensor.RGB565: 彩色,每个像素16bit。
2 设置图像大小:
- 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 感光元件)
3 自动增益/白平衡/曝光:
-
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 设置一个固定的曝光时间(以微秒为单位)。
4 设置窗口ROI
sensor.set_windowing(roi)
sensor.set_framesize(sensor.VGA) # 高分辨率
sensor.set_windowing((640, 80)) #取中间的640*80区域
roi的格式是(x, y, w, h)。你可以只传递 (w,h),而 roi
将会在图像中居中。
5 设置翻转
sensor.set_hmirror(True)
# 水平方向翻转
sensor.set_vflip(True)
# 垂直方向翻转
二、画图
1 画线
- image.draw_line(line_tuple, color=White) 在图像中画一条直线。
- line_tuple的格式是(x0, y0, x1, y1),意思是(x0, y0)到(x1, y1)的直线。
- 颜色可以是灰度值(0-255),或者是彩色值(r, g, b)的tupple。默认是白色
2 画框
- image.draw_rectangle(rect_tuple, color=White) 在图像中画一个矩形框。
- rect_tuple 的格式是 (x, y, w, h)。
3 画十字
- image.draw_cross(x, y, size=5, color=White) 在图像中画一个十字
- x,y是坐标
- size是两侧的尺寸
三、AprilTag标记跟踪
AprilTag
AprilTag测距代码:
import sensor, image, time, math
sensor.reset()
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QQVGA) # we run out of memory if the resolution is much bigger...
sensor.skip_frames(30)
sensor.set_auto_gain(False) # must turn this off to prevent image washout...
sensor.set_auto_whitebal(False) # must turn this off to prevent image washout...
sensor.set_hmirror(True)
clock = time.clock()
# f_x 是x的像素为单位的焦距。
# f_y 是y的像素为单位的焦距。
# c_x 是图像的x中心位置
# c_y 是图像的y中心位置
f_x = (2.8 / 3.984) * 160 # 默认值
f_y = (2.8 / 2.952) * 120 # 默认值
c_x = 160 * 0.5 # 默认值(image.w * 0.5)
c_y = 120 * 0.5 # 默认值(image.h * 0.5)
def degrees(radians):
return (180 * radians) / math.pi
while(True):
clock.tick()
img = sensor.snapshot()
for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): # 默认为TAG36H11
img.draw_rectangle(tag.rect(), color = (255, 0, 0))
img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0))
distance = math.sqrt(tag.x_translation()**2 + tag.y_translation()**2 + tag.z_translation()**2) * 2.550108137
# 位置的单位是未知的,旋转的单位是角度
print("Dis:",distance)
四、多模版匹配
...
五、图像滤波处理
...