生活随笔
收集整理的這篇文章主要介紹了
2021电赛F题之openmv巡线(附代码)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
效果展示:
出錯解決方法
openmv數字識別源代碼–gitee
通過使用不同閾值的方法可以得到當前區域中什么區域有紅線,對于電控而言作用類似于紅外對管,之后電控通過邏輯判斷如何運動,這就是我們隊伍目前的思想。最后會不會用上還不確定。
同時,如果你的題目是白底黑線,那么建議使用二值化的方法。
這種方法對于只有黑白兩色的識別精度會更高。
當然你也可以直接修改成黑色閾值,這個需要自己去調整
如果對代碼有不了解,可以點擊上方的gitee連接來向我詢問
代碼大致思路為選出五個roi區域,然后進行二值化或者閾值設定,將某種顏色的設定為1,另外的顏色設置為0,那么當openmv識別到的是特定的顏色的時候,就會返回1,這就類似于紅外對管,紅外對管遇到黑線和白線也會返回不同的值,這就是本套代碼的思路。
之后通過位移運算以及串口便可以發送對應的框中此時的數值了,從而起到紅外對管的作用。
如果對你有幫助就點個贊吧
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)
#加載模板
#模板應該是一個小的灰度圖像,如
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) # 跳過
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, #幀頭
10xA6,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
=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)#設置最低閾值 反轉#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 #左邊檢測到紅線
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 4data
|=(flag
[i
]<<(4-i
))sending_data(data
)for rec in roi1
:img
.draw_rectangle(rec
, color
=(255,0,0))#繪制出roi區域
總結
以上是生活随笔為你收集整理的2021电赛F题之openmv巡线(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。