这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » Arduino Nicla Vision【接近感应颜色识别项目】

共1条 1/1 1 跳转至

Arduino Nicla Vision【接近感应颜色识别项目】

菜鸟
2025-12-17 22:11:18     打赏

一、硬件介绍

1、产品特点

Arduino Nicla Vision 搭载STM32H747AII6 双核芯片(Cortex-M7_480MHz + Cortex-M4_240MHz),板载六轴智能运动传感器、集成麦克风和距离传感器、Wi-Fi和蓝牙模块、以及一个200万的彩色摄像头

image-20251201235158510.png


特性

image.png


系统框图


image-20251202202441525.png



功率


image-20251202204111527.png



二、功能介绍

【接近感应颜色识别】

当图像在ToF传感器设定的距离范围内时,才将摄像头范围内识别到图像的RGB值,通过串口输出显示;

在距离范围外时,串口只输出显示当前ToF检测的距离;


实物搭建效果

上方为:Nical Vision;

下方为:不同的颜色卡片;

image-20251215170947738.png


三、功能实现

1、距离检测

通过板载的ToF传感器获取当前物体与开发板的实时距离:

MY_DISTANCE 为设定的距离范围变量,只有当ToF检测到超过该值时,才在串口中输出此时的距离值;



主要相关代码

from machine import I2C
from vl53l1x import VL53L1X

import sensor

tof = VL53L1X(I2C(2))

sensor.reset() # 初始化传感器

MY_DISTANCE = 200    # 测距范围 200mm 内


while(True):
    distance = tof.read()
    if distance <= MY_DISTANCE :

		....

    else:
        print("Distance: %d mm" % distance)


2、颜色检测

通过板载的摄像头传感器获取检测到的画面并分析其颜色值:

1、设置识别框范围,分析获取框内的颜色

2、将默认的LaB颜色,转换为RGB888后通过串口输出显示;

import sensor,image,time


sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为RGB565.
sensor.set_framesize(sensor.QVGA)	# 画面分辨率
sensor.skip_frames(time=2000)

sensor.set_auto_whitebal(False)        # 关闭自动白平衡

ROI=(71,133,52,52)  # 设置识别框范围

i = 0
avg_r = 0
avg_g = 0
avg_b = 0

while(True):

        img = sensor.snapshot()
        statistics=img.get_statistics(roi=ROI)

        color_l=statistics.l_mode()
        color_a=statistics.a_mode()
        color_b=statistics.b_mode()


        r, g, b = image.lab_to_rgb((color_l, color_a, color_b))	#Lab -> RGB888

        r = min(255, max(0, r))
        g = min(255, max(0, g))
        b = min(255, max(0, b))

        avg_r += r
        avg_g += g
        avg_b += b
        i += 1

        if(i==10):			#获取平均值

            print("RGB: (%d, %d, %d)" %
            ( avg_r // 10, avg_g // 10, avg_b // 10))
            i = 0
            avg_r = 0
            avg_g = 0
            avg_b = 0

        img.draw_rectangle(ROI)	#显示识别框

    else:



四、代码编写

from machine import I2C
from vl53l1x import VL53L1X

import sensor,image,time
tof = VL53L1X(I2C(2))

sensor.reset() # 初始化传感器
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

sensor.set_auto_whitebal(False)        # 关闭自动白平衡

MY_DISTANCE = 200    # 测距范围 200m m 内
ROI=(71,133,52,52)  # 识别框内范围

i = 0
avg_r = 0
avg_g = 0
avg_b = 0

while(True):
    
    distance = tof.read()
    
    if distance <= MY_DISTANCE :
        img = sensor.snapshot()
        statistics=img.get_statistics(roi=ROI)

        color_l=statistics.l_mode()
        color_a=statistics.a_mode()
        color_b=statistics.b_mode()

        r, g, b = image.lab_to_rgb((color_l, color_a, color_b))
        
        r = min(255, max(0, r))
        g = min(255, max(0, g))
        b = min(255, max(0, b))


        avg_r += r
        avg_g += g
        avg_b += b
        i += 1

        if(i==10):         
            print("RGB: (%d, %d, %d)" %
            ( avg_r // 10, avg_g // 10, avg_b // 10))
            i = 0
            avg_r = 0
            avg_g = 0
            avg_b = 0
            
        img.draw_rectangle(ROI)

    else:
        print("Distance: %d mm" % distance)		#输出距离值



五、效果演示

右侧画面:检测到的颜色卡画面;

左侧串口输出:当前检测到画面的RGB值

image-20251215180634567.png


实物色卡的颜色值为:#C1328E (193,50,142)

识别到的RGB值为:RGB(173,80,123)

色差值为:7~10 左右

image-20251215180744093.png



效果演示


Delta E (CIE76):最基础的色差算法;

Delta E (CIE94):考虑更多视觉感知因素的改进算法;

Delta E (CIEDE2000): 最新、最精准的色差算法;

值越大表示两种颜色的差异越明显;

值越小则差异越不容易被人眼识别;





六、总结

在实际颜色识别过程中,当环境光线等变化时,都会导致检测的RGB值与实际的RGB值不同的误差;

关于误差,主要受以下几个方面的影响:

1、LAB → RGB 的转换

OpenMV 使用的是 RGB565 ↔ LAB 的近似转换算法,不是标准的 ICC 或 sRGB 转换,结果容易失真;


2、环境光线

色卡在不同环境光照下,显示的效果也会不同;

不同光照下(如反光、环境灯光强弱等)色彩还原都会有不同的影响;


3、颜色值转换

将RGB565转换为RGB888时,会存在精度损失;

RGB565 只有16位:R:5bit, G:6bit, B:5bit 每个通道最多32级灰度,导致颜色信息丢失;


image-20251215181631471.png

image-20251215194742297.png





关键词: Arduino Nicla Vision    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]