【K210】【图像入门基础】颜色识别——寻找最大色块

本文记录了一位初学者使用K210进行深度学习实践的过程,通过设置红色和蓝色阈值寻找图像中的色块,并找到最大色块进行标记和坐标显示,为后续学习者提供了参考代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

为了了解神经网络与深度学习,接触到了k210这个小玩意,先是跑了几个已经训练好的模板发现真的是太神奇了!更是激起了学习视觉这方面的热情,又反过头去学习图像处理的基础部分,发现博客上关于k210的例程是真的少…只能查阅"惜字如金"的官方例程,好不容易才解决一个很简单的问题(也赖博主实在太菜…)。在此记录学习成果,也为了今后的初学者能有例程参考。

代码

import sensor,image,lcd,time

#常用初始化
lcd.init()
sensor.reset()                      #复位摄像头
sensor.set_pixformat(sensor.RGB565) #设置像素格式 RGB565
sensor.set_framesize(sensor.QVGA)   #设置帧尺寸 QVGA (320x240)
sensor.skip_frames(time = 2000)     #跳过不稳定画面

#红色阈值
red_threshold = (87, 21, 27, 93, -5, 92)
#蓝色阈值
blue_threshold = (14, 87, -83, 127, -113, -14)

#寻找最大色块函数定义
def find_max(blobs):
    max_size=0
    for blob in blobs:
        if blob[2]*blob[3] > max_size:
            max_blob=blob
            max_size = blob[2]*blob[3]
    return max_blob

while True:
    img=sensor.snapshot()
    blobs = img.find_blobs([blue_threshold],merge=True)#把拍摄的一张图片里满足的色块纳入集合中

    if blobs:
            max_blob = find_max(blobs)#调用函数,返回最大色块

    img.draw_rectangle((max_blob.x(),max_blob.y(),max_blob.w(),max_blob.h()),color=(255,0,0))#用红色框出最大色块
    img.draw_string(max_blob.x(),max_blob.y(), "(x,y) =")
    img.draw_string(max_blob.x()+40,max_blob.y(), str(max_blob.cx()))
    img.draw_string(max_blob.x()+60,max_blob.y(), str(max_blob.cy()))#在框图左上角显示色块的中心坐标
    lcd.display(img)


运行结果

请添加图片描述
注:坐标是从屏幕的左上角开始,x往右增大,y往下增大

### K210 色块识别减少误差的方法 在利用 K210 芯片进行色块识别时,由于硬件特性和算法设计的原因可能会存在一定的误差。为了提高精度并优化性能,可以从以下几个方面入手: #### 1. 数据预处理 数据的质量直接影响到最终的结果。通过增强图像质量来降低噪声干扰是一个有效方法。例如,可以通过高斯滤波器平滑图像中的随机噪声[^2]。 ```python import cv2 def preprocess_image(image_path): image = cv2.imread(image_path) blurred = cv2.GaussianBlur(image, (5, 5), 0) # 高斯模糊降噪 return blurred ``` #### 2. 使用颜色空间转换 RGB 是一种常用的颜色表示方式,但在某些情况下可能并不适合直接用于色块检测。HSV 或 LAB 空间能够更好地分离亮度和色彩信息,从而提升分割效果。 ```python def convert_to_hsv(img): hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) return hsv_img ``` #### 3. 设置合理的阈值范围 针对目标物体设定精确的 HSV 值区间有助于更准确地区分背景和其他无关对象。这一步骤通常依赖于实验调整获得最佳参数组合[^1]。 ```python lower_blue = np.array([110,50,50]) upper_blue = np.array([130,255,255]) mask = cv2.inRange(hsv_img, lower_blue, upper_blue) res = cv2.bitwise_and(frame,frame, mask= mask) ``` #### 4. 利用形态学操作去除杂点 开运算(先腐蚀再膨胀)或者闭运算(先膨胀再腐蚀)可以帮助清理二值化后的残余小区域,使得轮廓更加清晰连贯。 ```python kernel = np.ones((5,5),np.uint8) opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel) ``` #### 5. 提升 KPU 性能配置 考虑到 K210 中集成的 KPU 单元专为深度学习推理而定制开发,在实际部署过程中应充分挖掘其潜力。比如适当裁剪网络结构、量化权重等措施都可以加快速度同时维持较高准确性。 --- ### 结论 综上所述,通过对原始素材做细致加工以及合理运用软硬件资源相结合的办法,可以在很大程度上改善基于 K210 平台实现的色块辨识系统的鲁棒性与稳定性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值