import sensor, image, time, math, pyb
from pyb import UART, LED
import json
import ustruct
# 摄像头初始化
sensor.reset() # 重置摄像头
sensor.set_pixformat(sensor.RGB565) # 设置图像格式为RGB565
sensor.set_framesize(sensor.QVGA) # 设置图像分辨率为QVGA(320x240)
sensor.skip_frames(time=2000) # 跳过2000毫秒以让摄像头稳定
sensor.set_auto_gain(False) # 禁用自动增益
sensor.set_auto_whitebal(False) # 禁用自动白平衡
red_threshold_01 = (10, 100, 127, 32, -43, 67) # 定义红色区域的阈值范围
clock = time.clock() # 创建一个时钟对象用于计时
# UART初始化
uart = UART(3, 115200) # 初始化UART3,波特率设置为115200
uart.init(115200, bits=8, parity=None, stop=1) # 设置UART的参数
def find_max(blobs):
max_size = 0 # 初始化最大blob的大小
max_blob = None # 初始化最大blob
for blob in blobs: # 遍历所有检测到的blob
if blob.pixels() > max_size: # 如果当前blob的像素数量大于最大值
max_blob = blob # 更新最大blob
max_size = blob.pixels() # 更新最大值
return max_blob # 返回像素数量最多的blob
def send_data(cx, cy, cw, ch):
data = ustruct.pack("<bbhhhhb", 0x2C, 0x12, int(cx), int(cy), int(cw), int(ch), 0x5B) # 将数据打包成字节格式
uart.write(data) # 通过UART发送数据
while(True): # 无限循环
clock.tick() # 更新时钟
img = sensor.snapshot() # 捕捉一帧图像
blobs = img.find_blobs([red_threshold_01]) # 检测图像中的红色区域(blob)
if blobs: # 如果找到了blob
max_b = find_max(blobs) # 获取像素数量最多的blob
if max_b: # 如果找到了最大blob
cx, cy, cw, ch = max_b.cx(), max_b.cy(), max_b.w(), max_b.h() # 获取blob的中心坐标和宽高
img.draw_rectangle(max_b.rect()) # 在图像上绘制最大blob的矩形框
img.draw_cross(cx, cy) # 在最大blob的中心位置绘制十字线
send_data(cx, cy, cw, ch) # 发送blob的坐标和尺寸数据
print(cx, cy, cw, ch) # 打印坐标和尺寸数据
else: # 如果没有找到blob
print("No blobs found") # 打印“未找到blob”的信息
import sensor, image, time, math, pyb
from pyb import UART, LED
import json
import ustruct
# 摄像头初始化
sensor.reset() # 重置摄像头
sensor.set_pixformat(sensor.RGB565) # 设置图像格式为RGB565
sensor.set_framesize(sensor.QVGA) # 设置图像分辨率为QVGA(320x240)
sensor.skip_frames(time=2000) # 跳过2000毫秒以让摄像头稳定
sensor.set_auto_gain(False) # 禁用自动增益
sensor.set_auto_whitebal(False) # 禁用自动白平衡
red_threshold_01 = (10, 100, 127, 32, -43, 67) # 定义红色区域的阈值范围
clock = time.clock() # 创建一个时钟对象用于计时
# UART初始化
uart = UART(3, 115200) # 初始化UART3,波特率设置为115200
uart.init(115200, bits=8, parity=None, stop=1) # 设置UART的参数
def find_max(blobs):
max_size = 0 # 初始化最大blob的大小
max_blob = None # 初始化最大blob
for blob in blobs: # 遍历所有检测到的blob
if blob.pixels() > max_size: # 如果当前blob的像素数量大于最大值
max_blob = blob # 更新最大blob
max_size = blob.pixels() # 更新最大值
return max_blob # 返回像素数量最多的blob
def send_data(cx, cy, cw, ch):
data = ustruct.pack("<bbhhhhb", 0x2C, 0x12, int(cx), int(cy), int(cw), int(ch), 0x5B) # 将数据打包成字节格式
uart.write(data) # 通过UART发送数据
while(True): # 无限循环
clock.tick() # 更新时钟
img = sensor.snapshot() # 捕捉一帧图像
blobs = img.find_blobs([red_threshold_01]) # 检测图像中的红色区域(blob)
if blobs: # 如果找到了blob
max_b = find_max(blobs) # 获取像素数量最多的blob
if max_b: # 如果找到了最大blob
cx, cy, cw, ch = max_b.cx(), max_b.cy(), max_b.w(), max_b.h() # 获取blob的中心坐标和宽高
img.draw_rectangle(max_b.rect()) # 在图像上绘制最大blob的矩形框
img.draw_cross(cx, cy) # 在最大blob的中心位置绘制十字线
send_data(cx, cy, cw, ch) # 发送blob的坐标和尺寸数据
print(cx, cy, cw, ch) # 打印坐标和尺寸数据
else: # 如果没有找到blob
print("No blobs found") # 打印“未找到blob”的信息
效果图如上