效果展示:

通過使用不同閾值的方法可以得到當前區域中什么區域有紅線,對于電控而言作用類似于紅外對管,之后電控通過邏輯判斷如何運動,這就是我們隊伍目前的思想,最后會不會用上還不確定,
如果對你有幫助就點個贊吧
import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_EX, SEARCH_DS
#傳感器配置
sensor.set_contrast(1)
sensor.set_gainceiling(16)
#可以通過設定視窗來減少搜索的影像
#sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
#加載模板
#模板應該是一個小的灰度影像,如32×32.
clock = time.clock()
#-----------------------以下是巡線部分-----------------------------
uart = UART(3,115200,bits=8, parity=None, stop=1, timeout_char = 1000)
#led = pyb.LED(3)
roi1 = [(0, 40, 20, 40), # 左 x y w h
(35, 40, 20, 40), # 中
(70,40,10,10),
(105,40,20,40),
(140,40,20,40)] # 右
#160 120
sensor.reset() # 初始化攝像頭
sensor.set_pixformat(sensor.RGB565) # 格式為 RGB565.
sensor.set_framesize(sensor.QQVGA)#160x120
sensor.skip_frames(time=2000) # 跳過10幀,使新設定生效
sensor.set_auto_whitebal(True) # turn this off.
sensor.set_auto_gain(False) # must be turned off for color tracking
sensor.set_vflip(False)# 垂直方向翻轉
sensor.set_hmirror(False)# 水平方向翻轉
clock = time.clock()
#low_threshold = (0, 100) # 105--115
#GRAYSCALE_THRESHOLD = [(20,100)]
#思路 現在需要除紅線外全是黑色,紅線為白
GROUND_THRESHOLD=(59, 25, 127, 19, -128, 89)
def sending_data(data):
global uart;
data = ustruct.pack("<bbb", #格式為倆個字符倆個短整型(2位元組)
0xA5, #幀頭1
0xA6,
data
) #陣列大小為7,其中2,3,4,5為有效資料,0,1,6為幀頭幀尾
uart.write(data); #必須要傳入一個位元組陣列
#print("head",data[0],"status",data[1],"tail",data[2])
print(data[2])
getp=0
#GRAYSCALE_THRESHOLD =(59, 25, 127, 19, -128, 89)
GROUND_THRESHOLD1=(78, 24, 127, 18, -28, 59)
#GRAYSCALE_THRESHOLD =(100, 33, 114, 22, 11, 127)#(100, 33, 127, 28, -4, 127)#(100, 30, 127, 17, -37, 127)
while(True):
data=0
blob1=None
blob2=None
blob3=None
blob4=None
blob5=None
flag = [0,0,0,0,0]
img = sensor.snapshot().lens_corr(strength = 1.7 , zoom = 1.0)#畸變矯正
#img.binary([low_threshold],invert = 1)#設定最低閾值 反轉
#img = sensor.snapshot().binary([GROUND_THRESHOLD])
blob1 = img.find_blobs([GROUND_THRESHOLD1], roi=roi1[0]) #left
blob2 = img.find_blobs([GROUND_THRESHOLD1], roi=roi1[1]) #middle
blob3 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[2])
blob4 = img.find_blobs([GROUND_THRESHOLD1], roi=roi1[3])
blob5 = img.find_blobs([GROUND_THRESHOLD1], roi=roi1[4])
if blob1:
flag[0] = 1 #左邊檢測到紅線
if blob2:
flag[1] = 1 #中間檢測到紅線
if blob3:
flag[2] = 1 #右邊檢測到紅線
if blob4:
flag[3] = 1 #中間檢測到紅線
if blob5:
flag[4] = 1 #右邊檢測到紅線
print(flag[0],flag[1],flag[2],flag[3],flag[4])
for i in (0,1,2,3,4): # 0 1 2 3 4
data|=(flag[i]<<(4-i))
sending_data(data)
for rec in roi1:
img.draw_rectangle(rec, color=(255,0,0))#繪制出roi區域
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349683.html
標籤:其他
下一篇:cgb2109-day05
