赞
踩
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,其余参数请至openmv官网参阅
openmv网站:寻找色块 · OpenMV中文入门教程
将复制的阈值参数替换入下列代码中
threshold =(40, 72, -15, -53, -5, 28)
'运行
然后利用img.draw_rectangle(b[0:4])及img.draw_cross(b[5], b[6])标注出来
- import sensor,image,lcd,time
-
- threshold =(40, 72, -15, -53, -5, 28)
-
- sensor.reset()
- sensor.set_pixformat(sensor.RGB565)
- sensor.set_framesize(sensor.QVGA)
- sensor.set_auto_exposure(False, exposure_us=40000)
- sensor.skip_frames(time = 2000)
- sensor.set_hmirror(0)
- sensor.set_vflip(1) #翻转屏幕
- #sensor.set_auto_gain(False) #颜色跟踪必须关闭自动增益
- #sensor.set_auto_whitebal(False) #颜色跟踪必须关闭白平衡
- clock = time.clock()
- lcd.init()
-
- while(True):
- img = sensor.snapshot()
- blobs = img.find_blobs([threshold])
- if blobs:
- for b in blobs:
- img.draw_rectangle(b[0:4]) # rect
- img.draw_cross(b[5], b[6]) # cx, cy
- # img.draw_string(0,100,str(b[5]),color=(0,255,255))#打印数据
- # img.draw_string(0,90,str(b[6]),color=(0,255,255)) #打印数据
- lcd.display(img)

在寻找色块的基础上对比各个部分的面积,利用每个部分的面积即像素点的多少进行对比,构建函数比较出最大像素点即最大色块
利用openmv库函数blob色块对象,find_blobs对象返回的是多个blob的列表,blobs就是很多色块
用for循环把所有的色块找一遍
- for blob in blobs:
- print(blob.cx())
blob.pixels() 返回色块的像素数量(int),也可以通过blob[4]来获取。
寻找最大色块只需要用到blob[4],其余参数请至openmv官网参阅
openmv网站:寻找色块 · OpenMV中文入门教程
最后同样将比较出的最大色块进行标注,也可以用img.draw_string()将数据在屏幕上显示出来
- import sensor,image,lcd,time
-
- lcd.init()
- sensor.reset()
- sensor.set_pixformat(sensor.RGB565)
- sensor.set_framesize(sensor.QVGA)
- sensor.set_hmirror(0)
- sensor.set_vflip(1)#翻转摄像头
- sensor.run(1)
-
- threshold = (17, 42, 14, 51, -5, 36)
-
-
- #寻找最大色块函数
- def find_max(blobs):
- max_size=0
- for blob in blobs:
- if blob[4] > max_size:
- max_blob=blob
- max_size = blob[4]#像素点→面积
- return max_blob
-
-
- while True:
- img=sensor.snapshot()
- blobs = img.find_blobs([threshold])
- if blobs:
- max_blob = find_max(blobs)#调用函数,返回最大色块
-
- img.draw_rectangle(max_blob[0:4], color=(0,255,255))
- img.draw_cross(max_blob[5], max_blob[6])
- img.draw_string(max_blob.x(),max_blob.y(), (str(max_blob.cx())+','+str(max_blob.cy())), color = (0,255,255))#标注中心坐标
- lcd.display(img)

这是摄像头中的基础用法,进行特定的特征颜色识别,拓展打印坐标加入pid算法实现自动控制等等在等待您的开发,希望对您有帮助,谢谢!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。