一、OPENMV部分
1.导入所需要的模块
import sensor, image, time, pyb
sensor :感光模块
image : 模块包含了处理图像的函数和类。这个模块提供了一系列的图像处理功能,包括但不限于图像过滤、特征检测、颜色识别、条形码识别等。通过这个模块,你可以对捕获的图像进行分析和修.
time :模块提供了时间相关的函数。这个模块可以用于执行延时操作(如等待一定时间),或者获取当前时间
pyb :模块是MicroPython的一部分,专为微控制器设计。它提供了访问和控制微控制器硬件的接口,如GPIO(通用输入输出)引脚、UART(通用异步接收/发送)通信、I2C、SPI等。通过pyb模块,你可以控制OpenMV上的LED灯、读取外部传感器、与其他硬件设备进行通信等。
2,初始化
串口
uart = pyb.UART(3, 115200, timeout_char=1000)
pyb.uart 函数返回值是一个对象,这个对象包含了UART端口的所有功能,包括数据发送、接收数据、配置等等,因此uart相当于一个串口,可以调用函数并控制串口3
pyb.uart(3 ,115200 ,timeout_char=1000)
参数一、3 : 串口端号;
参数二、115200 :串口通讯的波特率
参数三、time_char:字符超时时间,单位为us(微秒是秒的负六次方),如果在设定的时间内没有新的字符接收,则认为接收结束,并返回已接收的数据
摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_auto_gain(False) # must be turned off for color tracking
sensor.set_auto_whitebal(False)
sensor.skip_frames(time=2000)
sensor.reset():
重置摄像头为默认状态
sensor.set_pixformat(sensor.RGB565):
设置像素格式
sensor.set_framesize(sensor.QVGA):
设置摄像头捕获图像大小,QVGA是一种分辨率240x320
sensor.set_auto_gain(False):
关闭自动增益控制。增益控制会根据图像的亮度自动调整摄像头的感光度。在进行颜色追踪时,通常需要关闭自动增益,以保持颜色的一致性。
sensor.set_auto_whitebal(False)
关闭自动白平衡。白平衡是摄像头根据不同光源调整颜色温度的过程。关闭自动白平衡是为了防止摄像头在追踪颜色时自动调整颜色设置,这样可以保持颜色的稳定性。
sensor.skip_frames(time=2000)
在设置完摄像头后,跳过一段时间内的帧。这里time=2000
表示摄像头将跳过大约2000毫秒(2秒)的帧,这样做是为了让摄像头有时间适应光线条件和新的设置,尤其是在关闭了自动增益和自动白平衡之后。
颜色阈值 OPENMVIDE中有调整阈值的工具
red_threshold = (16, 69, 69, 23, 23, 71)
green_threshold = (27, 56, -68, -6, 19, 47)
blue_threshold = (5, 93, 26, -58, -17, -89)
while(True):
img = sensor.snapshot()
# 查找红色对象
for blob in img.find_blobs([red_threshold], pixels_threshold=100, area_threshold=100, merge=True):
img.draw_rectangle(blob.rect())
img.draw_cross(blob.cx(), blob.cy())
uart.write('Red')
# 查找绿色对象
for blob in img.find_blobs([green_threshold], pixels_threshold=100, area_threshold=100, merge=True):
img.draw_rectangle(blob.rect())
img.draw_cross(blob.cx(), blob.cy())
uart.write('Green')
# 查找蓝色对象
for blob in img.find_blobs([blue_threshold], pixels_threshold=100, area_threshold=100, merge=True):
img.draw_rectangle(blob.rect())
img.draw_cross(blob.cx(), blob.cy())
uart.write('Blue')
img = sensor.snapshot()
在while前先用snapshot()函数获取当前摄像头所捕获的一帧图像,并返回一个图像对象。这个图像对象可以用于后续的图像处理任务,如图像分析、特征检测、颜色追踪等。
img是snapshot的返回值,也就是图片对象
for blob in img.find_blobs([red_threshold], pixels_threshold=100, area_threshold=100, merge=True):
img.draw_rectangle(blob.rect())
img.draw_cross(blob.cx(), blob.cy())
uart.write('Red')
img.find_blobs()
函数用于在图像中寻找颜色阈值内的区域(blobs)。这个函数的返回值是一个列表,列表中的每个元素都是一个Blob
对象。
每个Blob
对象包含了关于检测到的颜色区域的信息,例如:
x
和 y
:Blob在图像中的位置坐标。
w
和 h
:Blob的宽度和高度。
pixels
:Blob中的像素数量。
cx
和 cy
:Blob的质心(中心)坐标。
rotation()
:Blob的旋转角度。
code()
:Blob的颜色阈值编码。
rect()
:Blob的矩形边界。
这个列表可以是空的,如果在图像中没有找到任何匹配的颜色区域。如果找到了匹配的区域,列表中将包含一个或多个Blob
对象,每个对象代表图像中的一个颜色区域。
mg.draw_rectangle(blob.rect())
img.draw_rectangle()
函数在图像上绘制一个矩形,矩形的位置和大小由
blob.rect()
返回的矩形参数决定。这个矩形框出了检测到的blob。
img.draw_cross(blob.cx(), blob.cy())
img.draw_cross()
函数在图像上绘制一个十字形标记,其位置由blob的中心坐标
(blob.cx()
,blob.cy()
)指定。这个十字形标记了blob的中心点。
uart.write('string')用串口3发送字符串