当前位置:   article > 正文

k210寻找色块及最大色块识别_k210开发板颜色识别

k210开发板颜色识别

前言

MAIX BIT(k210)与openmv同为摄像头,其中有什么互通的呢,在我接触了k210与openmv后,发现openmv中的函数很多对于k210同样适用,但是需要k210所支持的固件

固件

没有固件,k210不能运行openmv中的库函数,上述固件(请用电脑打开本文章下载)是我认为支持openmv库最好用的固件,打开kflash,选择所下载的固件,点击下载等待下载完成即可

如遇下载失败,将固件擦除→全部擦除,擦除完毕后再次下载即可

阈值

打开maixpy.ide,利用helloworld(文件→示例→01-Basics→helloworld)程序来获取当前所需颜色对应的阈值,打开阈值编辑器后点击帧缓冲区

注意!!!调阈值时所需色块必须在视野范围内!!!

阈值有LAB与灰度两种模式,选择LAB,将界面对应的6个滑块进行调节,直至所需颜色为全白,其余全黑

复制当前调过后LAB数值,此数值为当前所需颜色的阈值参数

寻找色块代码

利用openmv库函数image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)

image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)
  • thresholds是颜色的阈值,注意:这个参数是一个列表,可以包含多个颜色。如果你只需要一个颜色,那么在这个列表中只需要有一个颜色值,如果你想要多个颜色阈值,那这个列表就需要多个颜色阈值。注意:在返回的色块对象blob可以调用code方法,来判断是什么颜色的色块。
  • roi是“感兴趣区”.....

寻找色块只需要用到 thresholds,其余参数请至openmv官网参阅

openmv网站:寻找色块 · OpenMV中文入门教程

将复制的阈值参数替换入下列代码中

threshold   =(40, 72, -15, -53, -5, 28)'
运行

然后利用img.draw_rectangle(b[0:4])及img.draw_cross(b[5], b[6])标注出来

寻找色块完整代码:

  1. import sensor,image,lcd,time
  2. threshold =(40, 72, -15, -53, -5, 28)
  3. sensor.reset()
  4. sensor.set_pixformat(sensor.RGB565)
  5. sensor.set_framesize(sensor.QVGA)
  6. sensor.set_auto_exposure(False, exposure_us=40000)
  7. sensor.skip_frames(time = 2000)
  8. sensor.set_hmirror(0)
  9. sensor.set_vflip(1) #翻转屏幕
  10. #sensor.set_auto_gain(False) #颜色跟踪必须关闭自动增益
  11. #sensor.set_auto_whitebal(False) #颜色跟踪必须关闭白平衡
  12. clock = time.clock()
  13. lcd.init()
  14. while(True):
  15. img = sensor.snapshot()
  16. blobs = img.find_blobs([threshold])
  17. if blobs:
  18. for b in blobs:
  19. img.draw_rectangle(b[0:4]) # rect
  20. img.draw_cross(b[5], b[6]) # cx, cy
  21. # img.draw_string(0,100,str(b[5]),color=(0,255,255))#打印数据
  22. # img.draw_string(0,90,str(b[6]),color=(0,255,255)) #打印数据
  23. lcd.display(img)

效果图 

寻找最大色块代码

在寻找色块的基础上对比各个部分的面积,利用每个部分的面积即像素点的多少进行对比,构建函数比较出最大像素点即最大色块

利用openmv库函数blob色块对象,find_blobs对象返回的是多个blob的列表,blobs就是很多色块

用for循环把所有的色块找一遍

  1. for blob in blobs:
  2. print(blob.cx())
  • blob.pixels() 返回色块的像素数量(int),也可以通过blob[4]来获取。

寻找最大色块只需要用到blob[4],其余参数请至openmv官网参阅

openmv网站:寻找色块 · OpenMV中文入门教程

最后同样将比较出的最大色块进行标注,也可以用img.draw_string()将数据在屏幕上显示出来

 寻找最大色块完整代码:

  1. import sensor,image,lcd,time
  2. lcd.init()
  3. sensor.reset()
  4. sensor.set_pixformat(sensor.RGB565)
  5. sensor.set_framesize(sensor.QVGA)
  6. sensor.set_hmirror(0)
  7. sensor.set_vflip(1)#翻转摄像头
  8. sensor.run(1)
  9. threshold = (17, 42, 14, 51, -5, 36)
  10. #寻找最大色块函数
  11. def find_max(blobs):
  12. max_size=0
  13. for blob in blobs:
  14. if blob[4] > max_size:
  15. max_blob=blob
  16. max_size = blob[4]#像素点→面积
  17. return max_blob
  18. while True:
  19. img=sensor.snapshot()
  20. blobs = img.find_blobs([threshold])
  21. if blobs:
  22. max_blob = find_max(blobs)#调用函数,返回最大色块
  23. img.draw_rectangle(max_blob[0:4], color=(0,255,255))
  24. img.draw_cross(max_blob[5], max_blob[6])
  25. img.draw_string(max_blob.x(),max_blob.y(), (str(max_blob.cx())+','+str(max_blob.cy())), color = (0,255,255))#标注中心坐标
  26. lcd.display(img)

总结

这是摄像头中的基础用法,进行特定的特征颜色识别,拓展打印坐标加入pid算法实现自动控制等等在等待您的开发,希望对您有帮助,谢谢!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/825761
推荐阅读
相关标签
  

闽ICP备14008679号