这次我们接触摄像头部分
在大致过了遍相关例程后,选取2部分演示讲解:
第一部分:圆形检测,常用于物块之类的,常用于工训赛等情况
find_circles对象
构造函数
image.find_circles([roi[, x_stride=2[, y_stride=1[, threshold=2000[, x_margin=10[, y_margin=10 [, r_margin=10[, r_min=2[, r_max[, r_step=2]]]]]]]]]])
找圆函数。返回一个image.circle圆形对象,该圆形对象有4个值: x, y(圆心), r (半径)和magnitude(量级);量级越大说明识别到的圆可信度越高。
参数说明:
roi: 识别区域(x,y,w,h),未指定则默认整张图片。
threshold: 阈值。返回大于或等于threshold的圆,调整识别可信度。
x_stride y_stride : 霍夫变换时跳过x,y像素的量;
x_margin y_margin r_margin : 控制所检测圆的合并;
r_min r_max: 控制识别圆形的半径范围;
r_step:控制识别步骤。
'''
实验名称:圆形检测
实验平台:01Studio CanMV K230
教程:wiki.01studio.cc
说明:推荐使用320x240以下分辨率,分辨率过大会导致帧率下降。
通过修改lcd_width和lcd_height参数值选择3.5寸或2.4寸mipi屏。
'''
import time, os, sys
from media.sensor import *
from media.display import *
from media.media import *
lcd_width = 800
lcd_height = 480
'''
#2.4寸mipi屏分辨率定义
lcd_width = 640
lcd_height = 480
'''
sensor = Sensor(width=1280, height=960)
sensor.reset()
sensor.set_framesize(width=320, height=240)
sensor.set_pixformat(Sensor.RGB565)
Display.init(Display.ST7701, width=lcd_width, height=lcd_height, to_ide=True)
MediaManager.init()
sensor.run()
clock = time.clock()
while True:
clock.tick()
img = sensor.snapshot()
for c in img.find_circles(threshold = 2000, x_margin = 10, y_margin= 10,
r_margin = 10,r_min = 2, r_max = 100, r_step = 2):
img.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0),thickness=2)
print(c)
Display.show_image(img, x=round((lcd_width-sensor.width())/2),y=round((lcd_height-sensor.height())/2))
print(clock.fps())

可以获得上面这种带有坐标的图像
第二部分:二维码部分
二维码是什么?
想象一下,条形码(那种超市里扫的黑白条纹)就像一张只能写一行字的纸条,信息量有限,只能记下简单的东西(比如商品编号)。而二维码呢,就像一张小型的“像素画”,它利用黑白小方块在平面上排列组合。这些排列组合遵循一定的规则,就像密码一样。这张“像素画”里巧妙地藏进了大量的“0”和“1”(就像电脑理解的语言)。不同的黑白方块图案代表不同的“0”或“1”组合,从而记录了文字、网址、联系方式等各种信息。CanMV K230 这款开发板,自带了一个摄像头,就像给它装上了一双“眼睛”。它还内置了非常聪明的“大脑”(运行着MicroPython)。这个“大脑”里有个特别方便的“小工具”,名字就叫 find_qrcodes()。当CanMV K230的“眼睛”(摄像头)看到二维码时,它并不会傻乎乎地直接把图像显示给你看。相反,它会立刻启动那个“小工具” find_qrcodes()。这个“小工具”会自动分析摄像头拍到的图像,就像侦探一样寻找那个特殊的“像素画”图案。一旦找到,它会马上“破译”这个二维码里藏的信息,并把结果(比如网址、文本等)整理好告诉你。
'''
实验名称:二维码识别
实验平台:01Studio CanMV K230 + 3.5寸mipi屏
说明:编程实现摄像头识别二维码
教程:wiki.01studio.cc
'''
import time, math, os, gc
from media.sensor import *
from media.display import *
from media.media import *
sensor = Sensor()
sensor.reset()
sensor.set_framesize(width=800, height=480)
sensor.set_pixformat(Sensor.RGB565)
Display.init(Display.ST7701, to_ide=True)
MediaManager.init()
sensor.run()
clock = time.clock()
while True:
clock.tick()
img = sensor.snapshot()
res = img.find_qrcodes()
if len(res) > 0:
img.draw_rectangle(res[0].rect(), thickness=2)
img.draw_string_advanced(0, 0, 30, res[0].payload(), color = (255, 255, 255))
print(res[0].payload())
Display.show_image(img)
print(clock.fps())