#image为摄像头拍下来的一个图片类
image.draw_line((10,10,20,30), color=(255,0,0)) #画一条线,第一个tuple代表连线的两个点
#颜色可以是灰度值(0-255),或者是彩色值(r, g, b)的tupple。默认是白色
image.draw_rectangle(rect_tuple, color=(255,0,0)) #画一个矩形
image.draw_circle(x, y, radius, color) #在图像中画一个圆。
#x,y是圆心坐标
#radius是圆的半径
image.draw_cross(x, y, size=5, color=White) #在图像中画一个十字
#x,y是坐标
#size是两侧的尺寸
blobs=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是颜色的阈值,注意:这个参数是一个列表,可以包含多个颜色。如果你只需要一个颜色,那么在这个列表中只需要有一个颜色值,如果你想要多个颜色阈值,那这个列表就需要多个颜色阈值。
注意:
1.在返回的色块对象blob可以调用code方法,来判断是什么颜色的色块。
2.返回的blobs是一个列表,包含的是找到的所有色块,要调用blob的方法需要用for对list进行遍历
import sensor, image, time
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
clock = time.clock()
color_range=(43, 64, 27, 127, -128, 127) #所需要寻找的颜色的LAB范围
while(True):
clock.tick()
img = sensor.snapshot()
blobs=img.find_blobs([color_range]) #返回一个blob对象的列表
for blob in blobs:
print(blob.rect())
img.draw_rectangle(blob.rect()) #对所识别blob区域画框
#print(clock.fps())
使用merge参数可以合并所有重叠的blob为一个
all_blobs=img.find_blobs([red_range,brow_range],merge=True)
单独使用则无影响
red_blobs=img.find_blobs([red_range],merge=True)
注意:
1.采用的是ncc算法,只能匹配与模板图片大小和角度基本一致的图案。局限性相对来说比较大,视野中的目标图案稍微比模板图片大一些或者小一些就可能匹配不成功。
2.模板匹配适应于摄像头与目标物体之间距离确定,不需要动态移动的情况。比如适应于流水线上特定物体的检测,而不适应于小车追踪一个运动的排球(因为运动的排球与摄像头的距离是动态的,摄像头看到的排球大小会变化,不会与模板图片完全一样)。
3.所识别的图应为灰度图
4.识别不了人脸
import time, sensor, image
from image import SEARCH_EX, SEARCH_DS
#从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX,
#SEARCH_DS两个需要的部分,而不把image模块全部引入。
sensor.reset()
sensor.set_contrast(1)
sensor.set_gainceiling(16)
sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QQVGA) #控制摄像头的大小,QVGA就会超内存
template = image.Image("/FACE.pgm") #加载模板图片
clock = time.clock()
# Run template matching
while (True):
clock.tick()
img = sensor.snapshot()
# find_template(template, threshold, [roi, step, search])
# ROI: The region of interest tuple (x, y, w, h).
# Step: The loop step used (y+=step, x+=step) use a bigger step to make it faster.
# Search is either image.SEARCH_EX for exhaustive search or image.SEARCH_DS for diamond search
#
# Note1: ROI has to be smaller than the image and bigger than the template.
# Note2: In diamond search, step and ROI are both ignored.
r = img.find_template(template, 0.70,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
#find_template(template, threshold, [roi, step, search]),threshold中
#的0.7是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
#注意roi的大小要比模板图片大,比frambuffer小。
#把匹配到的图像标记出来
if r:
img.draw_rectangle(r) #这里返回的r是一个tuple,直接表示了匹配到的图片的位置
print(clock.fps())
bmp转pmg:https://convertio.co/zh/bmp-pgm/
如果需要对多个模板进行匹配,作遍历即可
templates=['\0.pmg','\1.pmg','\2.pmg']
clock = time.clock()
while (True)
clock.tick()
img = sensor.snapshot()
for t in templates
template=img.Image(t)
r = img.find_template(template, 0.70, step=4, search=SEARCH_EX)
if r
img.draw_rectangle(r) #画出匹配到的模板的区域
print(t) #打印匹配的模板名字