入门阶段
简单来说,OpenMv就是一个可编程的摄像头,通过使用python语言,专门用作嵌入式当中的视觉感光元件。下面将介绍Openmv使用过程中的常用知识。
感光元件即sensor模块,与摄像头有关。看如下例子:
import sensor#引入感光元件的模块
# 设置摄像头
sensor.reset()#初始化感光元件
sensor.set_pixformat(sensor.RGB565)#设置为彩色,用到其它参数时再上官方文档里找,下同
sensor.set_framesize(sensor.QVGA)#设置图像的大小
sensor.skip_frames()#跳过n张照片,在更改设置后,跳过一些帧,等待感光元件变稳定。
# 一直拍照
while(True):
img = sensor.snapshot()#拍摄一张照片,img为一个image对象
sensor.set_framesize(sensor.VGA) # 高分辨率
sensor.set_windowing((640, 80)) #取中间的640*80区域
img = sensor.snapshot()
img.get_pixel(10,10)
img.set_pixcel(10,10,(255,0,0))#设置坐标(10,10)的像素点为红色(255,0,0)
image.draw_line(line_tuple, color=White) 在图像中画一条直线,其中line_tuple的格式为(x0, y0, x1, y1),即从某点到某点的直线
image.draw_rectangle(rect_tuple, color=White) 在图像中画一个矩形框,其中rect_tuple 的格式是 (x, y, w, h)。
这里只举如上两个例子,其它的用到再去查即可。
各种外设的学习
OpenMv存在一个文件系统,根目录下有一个main.py,把你需要导入的自定义模块复制到根目录下即可。
from pyb import LED
led = LED(1) # 红led
led.toggle()
led.on()#亮
led.off()#灭
from pyb import Pin
p_out = Pin('P7', Pin.OUT_PP)#设置p_out为输出引脚
p_out.high()#设置p_out引脚为高
p_out.low()#设置p_out引脚为低
p_in = Pin('P7', Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
value = p_in.value() # get value, 0 or 1#读入p_in引脚的值
可以看出,pyb模块里各种外设的操作和32类似,易上手。
from pyb import Servo
s1 = Servo(1) # servo on position 1 (P7)
s1.angle(45) # move to 45 degrees
s1.angle(-60, 1500) # move to -60 degrees in 1500ms
s1.speed(50) # for continuous rotation servos
具体需要用到哪个舵机还是需要参照原理图的结构。
from pyb import Timer
tim = Timer(4, freq=1000)
tim.counter() # get counter value
tim.freq(0.5) # 0.5 Hz
tim.callback(lambda t: pyb.LED(1).toggle()) //类似于32的回调函数
from pyb import Pin, ExtInt
callback = lambda e: print("intr")
ext = ExtInt(Pin('P7'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
from pyb import Pin, Timer
p = Pin('P7') # P7 has TIM4, CH1
tim = Timer(4, freq=1000)
ch = tim.channel(1, Timer.PWM, pin=p)
ch.pulse_width_percent(50)
from pyb import UART
uart = UART(3, 9600)
uart.write('hello')
uart.read(5) # read up to 5 bytes
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)
red = (minL, maxL, minA, maxA, minB, maxB)
但是OpenMv如此强大,在IDE工具栏里的Machine Vision中有阙值调试工具
能看到这里的人真是不简单啊 !!!
最后一个!!!串口的使用
先来看如下一段代码:
在这里,我们用串口来不断发送blob数据,而寻找色块的过程跟opencv的思路相似,在前边也介绍过,只不过在openmv中更简便。
当用openmv的串口发送完数据后,接收端需要进行相应的解析才能得到想要的数据,前提是你需要知道发送数据的格式并撰写相应的函数。
学到这里,相信你对OpenMv已经掌握地差不多了,如果想更深入地进行学习,可以到它的官网里去看所有API的介绍。
~~~留赞的人今年心想事成