生活随笔
收集整理的這篇文章主要介紹了
2021电赛F题之openmv巡线(附代码)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
效果展示:
出錯(cuò)解決方法
openmv數(shù)字識(shí)別源代碼–gitee
通過(guò)使用不同閾值的方法可以得到當(dāng)前區(qū)域中什么區(qū)域有紅線,對(duì)于電控而言作用類似于紅外對(duì)管,之后電控通過(guò)邏輯判斷如何運(yùn)動(dòng),這就是我們隊(duì)伍目前的思想。最后會(huì)不會(huì)用上還不確定。
同時(shí),如果你的題目是白底黑線,那么建議使用二值化的方法。
這種方法對(duì)于只有黑白兩色的識(shí)別精度會(huì)更高。
當(dāng)然你也可以直接修改成黑色閾值,這個(gè)需要自己去調(diào)整
如果對(duì)代碼有不了解,可以點(diǎn)擊上方的gitee連接來(lái)向我詢問(wèn)
代碼大致思路為選出五個(gè)roi區(qū)域,然后進(jìn)行二值化或者閾值設(shè)定,將某種顏色的設(shè)定為1,另外的顏色設(shè)置為0,那么當(dāng)openmv識(shí)別到的是特定的顏色的時(shí)候,就會(huì)返回1,這就類似于紅外對(duì)管,紅外對(duì)管遇到黑線和白線也會(huì)返回不同的值,這就是本套代碼的思路。
之后通過(guò)位移運(yùn)算以及串口便可以發(fā)送對(duì)應(yīng)的框中此時(shí)的數(shù)值了,從而起到紅外對(duì)管的作用。
如果對(duì)你有幫助就點(diǎn)個(gè)贊吧
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)
#可以通過(guò)設(shè)置窗口來(lái)減少搜索的圖像
#sensor.set_windowing(((640-80)
#加載模板
#模板應(yīng)該是一個(gè)小的灰度圖像,如
32×
32.clock
= time
.clock()
#
-----------------------以下是巡線部分
-----------------------------
# qq460219753
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) # 跳過(guò)
10幀,使新設(shè)置生效
sensor
.set_auto_whitebal(True
) # turn this off
.
sensor
.set_auto_gain(False
) # must be turned off
for color tracking
sensor
.set_vflip(False
)# 垂直方向翻轉(zhuǎn)
sensor
.set_hmirror(False
)# 水平方向翻轉(zhuǎn)
clock
= time
.clock()#low_threshold = (0, 100) # 105--115
#GRAYSCALE_THRESHOLD = [(20,100)]
#思路 現(xiàn)在需要除紅線外全是黑色,紅線為白
GROUND_THRESHOLD
=(59, 25, 127, 19, -128, 89)
def
sending_data(data
):global uart
;data
= ustruct
.pack("<bbb", #格式為倆個(gè)字符倆個(gè)短整型
(2字節(jié)
)0xA5, #幀頭
10xA6,data
) #數(shù)組大小為
7,其中
2,
3,
4,
5為有效數(shù)據(jù),
0,
1,
6為幀頭幀尾uart
.write(data
); #必須要傳入一個(gè)字節(jié)數(shù)組
#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
=0blob1
=Noneblob2
=Noneblob3
=Noneblob4
=Noneblob5
=Noneflag
= [0,0,0,0,0]img
= sensor
.snapshot().lens_corr(strength
= 1.7 , zoom
= 1.0)#畸變矯正
#img.binary([low_threshold],invert = 1)#設(shè)置最低閾值 反轉(zhuǎn)#img = sensor.snapshot().binary([GROUND_THRESHOLD])blob1
= img
.find_blobs([GROUND_THRESHOLD1
], roi
=roi1
[0]) #leftblob2
= img
.find_blobs([GROUND_THRESHOLD1
], roi
=roi1
[1]) #middleblob3
= 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 #左邊檢測(cè)到紅線
if blob2
:flag
[1] = 1 #中間檢測(cè)到紅線
if blob3
:flag
[2] = 1 #右邊檢測(cè)到紅線
if blob4
:flag
[3] = 1 #中間檢測(cè)到紅線
if blob5
:flag
[4] = 1 #右邊檢測(cè)到紅線
print(flag
[0],flag
[1],flag
[2],flag
[3],flag
[4])for i
in (0,1,2,3,4): #
0 1 2 3 4data
|=(flag
[i
]<<(4-i
))sending_data(data
)for rec in roi1
:img
.draw_rectangle(rec
, color
=(255,0,0))#繪制出roi區(qū)域
總結(jié)
以上是生活随笔為你收集整理的2021电赛F题之openmv巡线(附代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。