k210 ——Blob类之blob.code()方法
blob类是k210图像识别中最常用的一类,其中用得多的是blob.rect(),blob.x(),blob.y(), blob.w(),blob.h()这几个方法,这几个方法的用法也很简单,详细大家可以查看k210官方网站image(机器视觉) - Sipeed Wiki
一、blob.code()的函数说明
下面进入正题👇blob.code()方法
这个方法官方给的说明是
返回一个16位的二进制数字,其中为每个颜色阈值设置一个位,这是色块的一部分。
例如,如果您通过 image.find_blobs 来寻找三个颜色阈值,这个色块可以设置为0/1/2位。 注意:除非以merge=True 调用 image.find_blobs ,否则每个色块只能设置一位。 那么颜色阈值不同的多个色块就可以合并在一起了。 您也可以用这个方法以及多个阈值来实现颜色代码跟踪。
可以通过索引 [8] 取得这个值。
那到底这个方法的作用是什么呢?下面进行举例说明👇
举例说明
假设我们有一张图像,其中包含了三个不同颜色的物体:红色、绿色和蓝色。我们希望使用 image.find_blobs() 函数找到这些色块,并为每个色块分配一个唯一的代码。
import sensor
import image
# 初始化传感器
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
# 拍摄图像
img = sensor.snapshot()
# 设置颜色阈值
red_threshold = (30, 100, -128, 127, -128, 127) # 红色阈值
green_threshold = (0, 30, -128, 127, -128, 127) # 绿色阈值
# 寻找色块
blobs = img.find_blobs([red_threshold, green_threshold], pixels_threshold=200)
# 打印每个色块的代码
for blob in blobs:
print(blob.code())
在上述示例中,我们设置了红色和绿色的颜色阈值,并使用 img.find_blobs() 函数来寻找色块。由于没有设置 merge=True 参数,每个色块只能表示一个颜色阈值。
如果红色的阈值代码为0,绿色的阈值代码为1,那么对应的色块的代码将是0和1。这意味着我们可以根据色块的代码来区分它们属于红色还是绿色。
然而,如果我们设置了 merge=True 参数,那么具有不同颜色阈值的色块可以合并在一起,形成一个更大的色块。这时,色块的代码将包含多个颜色阈值的信息。
merge=True参数设置的影响
注重说明一点的是merge=True这个参数设置的影响👇
当我们设置了merge=True时,使用blob.code()将不再能够准确地区分是哪个颜色的色块。而是将具有不同颜色阈值的色块合并在一起,形成一个更大的色块
假设在图像中有两个红色色块和一个绿色色块。在没有设置 merge=True 参数的情况下,我们可以通过色块的代码区分它们,例如红色的代码为0,绿色的代码为1。
但是,当设置了 merge=True 参数后,红色和绿色的色块将被合并成一个或多个更大的色块。这时,色块的代码将不再能够准确地区分是哪个颜色的色块。返回的代码内容通常是一个整数或其他形式的标识,用于表示合并后的色块。