OpenMv学习

简单来说,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对象

ROI区域

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)

图像的运算

  1. image.invert() 图像取反
  2. image.nand(image) 图像之间进行与非运算
  3. image.nor(image) 图像之间进行或非运算
  4. image.xor(image)图像之间进行异或运算
  5. image.difference(image) 此函数通常用来做移动检测

图像的运算一般不太常用,就保留一个印象就可以了。

画图

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,把你需要导入的自定义模块复制到根目录下即可。

操作LED

from pyb import LED
led = LED(1) # 红led
led.toggle()
led.on()#亮
led.off()#灭

操作IO口

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的回调函数IO中断from pyb import Pin, ExtInt
​
callback = lambda e: print("intr")
ext = ExtInt(Pin('P7'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)PWM输出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)


UART

from pyb import UART

uart = UART(3, 9600)
uart.write('hello')
uart.read(5) # read up to 5 bytes

总结

对我来说,OpenMV的学习,还得是上项目去做,比如寻找色块发回给单片机中点坐标并加以显示之类的。我相信很多人都是因为电赛需要才开始接触OpenMV,而电赛考题的视觉方面,能考的也就那几块内容,在OpenMV官方文档上已经有很多操作教学,已经足够应付。而且说实在的,OpenMV这个东西真算不上叫什么视觉,视觉这个范围太高深了,OpenMV其实就是一个模块,而你使用起来,就把它作为单片机的一个外设来使用就行了,没必要说它是摄像头,什么它就很难之类的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值