這個是全網(wǎng)最詳細(xì)的STM32項(xiàng)目教學(xué)視頻。
第一篇在這里:
視頻在這里
19.2-openmv視覺循跡功能-完成視覺識別指定區(qū)域
功 能: Openmv循跡識別線
硬件要求: OpenMV4 H7 Plus 或者 OpenMV4 H7、openMV串口轉(zhuǎn)接板(方便接線的,也可以不用)。
攝像頭五個口 是否識別出來黑線,通過openmv軟件串行終端輸出
根據(jù)自己攝像頭特點(diǎn)查看測試是否需要這兩句 鏡頭反轉(zhuǎn)的操作
# 注意是否有下面兩句根據(jù)自己攝像頭調(diào)整
sensor.set_vflip(True) #垂直方向翻轉(zhuǎn) 根據(jù)自己攝像頭和模塊安裝位置調(diào)整 ?。?!重要不同攝像頭是否需要鏡像根據(jù)實(shí)際情況定,如果不需要鏡像需要注釋掉
sensor.set_hmirror(True) #水平方向反轉(zhuǎn) 根據(jù)自己攝像頭和模塊安裝位置調(diào)整 ?。?!重要不同攝像頭是否需要鏡像根據(jù)實(shí)際情況定,如果不需要鏡像需要注釋掉
這里通過攝像頭識別指定區(qū)域是否我們想要的閾值
通過roi來定指定區(qū)域
通過閾值編輯器設(shè)置閾值
閾值保持在變量這里
#最好根據(jù)自己情況設(shè)置一下!??!
GROUND_THRESHOLD=(0, 30, -22, 23, -128, 80)#閾值參數(shù),用于在圖像處理中對標(biāo)物體進(jìn)行顏色識別分割。在OpenMV IDE軟件 工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識別的LAB閾值。
然后為了方便觀察openmv 板子程序是否在運(yùn)行,我們增加對板載RGB燈 運(yùn)動控制
led = pyb.LED(1) # led = pyb.LED(1)表示led表示紅燈。各種狀態(tài)如下:Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
led.on() #點(diǎn)亮紅燈 板載紅燈點(diǎn)亮表示程序得到執(zhí)行
使用代碼如下
import pyb, sensor, image, math, time
from pyb import UART
import ustruct
from image import SEARCH_EX, SEARCH_DS
import time
import sensor, lcd
#導(dǎo)入需要的庫和模塊
#使用中可能根據(jù)自己情況需要修改的值
#1. GROUND_THRESHOLD 閾值參數(shù) 通過工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識別的LAB閾值。
#2.注意是否有下面兩句根據(jù)自己攝像頭調(diào)整
#sensor.set_vflip(True)
#sensor.set_hmirror(True)
#sensor.set_contrast(1)#設(shè)置相機(jī)圖像對比度。-3至+3。
#sensor.set_gainceiling(16)#設(shè)置相機(jī)圖像增益上限。2, 4, 8, 16, 32, 64, 128。
roi1 = [( 20, 105, 10, 10),
( 45, 105, 10, 10),
( 75, 105, 10, 10),
( 105, 105, 10, 10),
(130, 105, 10, 10)]#定義一個名為roi1的列表,其中包含了5個元組。每個元組代表了一個矩形感興趣區(qū)域在圖像上的位置和大小。
#具體而言,每個元組包含了4個數(shù)值依次的含義是:ROI左上角點(diǎn)的x坐標(biāo)、ROI左上角點(diǎn)的y坐標(biāo)、ROI的寬度、ROI的高度
led = pyb.LED(1) # led = pyb.LED(1)表示led表示紅燈。各種狀態(tài)如下:Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
led.on() #點(diǎn)亮紅燈 板載紅燈點(diǎn)亮表示程序得到執(zhí)行
sensor.reset()#初始化相機(jī)傳感器。
sensor.set_pixformat(sensor.RGB565)#設(shè)置相機(jī)模塊的像素模式:sensor.RGB565: 16 bits/像素。
sensor.set_framesize(sensor.QQVGA)#設(shè)置圖像分辨率、如果改變分辨率也要調(diào)整ROI區(qū)域。攝像頭不同、應(yīng)用場景不同可以選擇不同分辨率。這里使用QQVGA可能畫質(zhì)很胡,但是為了兼容不同型號攝像頭我們先使用QQVGA 不影響循跡效果
sensor.skip_frames(time=2000)#跳過指定數(shù)目的幀。在這里,設(shè)置為跳過2000毫秒(即2秒)的幀。這樣可以給傳感器一些時間進(jìn)行初始化和自適應(yīng)調(diào)整。
sensor.set_auto_whitebal(True)#設(shè)置為自動白平衡模式。這使得攝像頭可以根據(jù)場景中的光照條件自動調(diào)整圖像的白平衡,從而保持圖像色彩更加準(zhǔn)確和自然。
sensor.set_auto_gain(False)#關(guān)閉自動增益模式。通常情況下,開啟自動增益會幫助攝像頭自動調(diào)整亮度,并在低亮度環(huán)境下提高圖像清晰度。通過設(shè)置為False,禁用了這個功能,使用固定增益值。
# 注意是否有下面兩句根據(jù)自己攝像頭調(diào)整
sensor.set_vflip(True) #垂直方向翻轉(zhuǎn) 根據(jù)自己攝像頭和模塊安裝位置調(diào)整 !??!重要不同攝像頭是否需要鏡像根據(jù)實(shí)際情況定,如果不需要鏡像需要注釋掉
sensor.set_hmirror(True) #水平方向反轉(zhuǎn) 根據(jù)自己攝像頭和模塊安裝位置調(diào)整 ?。?!重要不同攝像頭是否需要鏡像根據(jù)實(shí)際情況定,如果不需要鏡像需要注釋掉
#lcd.init() #初始化lcd屏幕
#最好根據(jù)自己情況設(shè)置一下!??!
GROUND_THRESHOLD=(0, 30, -22, 23, -128, 80)#閾值參數(shù),用于在圖像處理中對標(biāo)物體進(jìn)行顏色識別分割。在OpenMV IDE軟件 工具->機(jī)器視覺->閾值編輯器->幀緩沖區(qū) 調(diào)整出要識別的LAB閾值。
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)#對獲取到的圖像執(zhí)行鏡頭校正的操作。
blob1 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[0])#在圖像中通過顏色閾值 GROUND_THRESHOLD1 檢測 roi1[0] 區(qū)域內(nèi)的色塊,并將檢測結(jié)果賦值給 blob1。
blob2 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[1])#同理
blob3 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[2])
blob4 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[3])
blob5 = img.find_blobs([GROUND_THRESHOLD], roi=roi1[4])
if blob1:#如果roi1區(qū)域內(nèi)找到閾值色塊 就會賦值flag[0]為1
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])#把數(shù)據(jù)打印在串行終端方便調(diào)試
for rec in roi1:#遍歷所有感興趣的區(qū)域roi1 并繪制color=(255,0,0)顏色
img.draw_rectangle(rec, color=(255,0,0))
#lcd.display(img) # Take a picture and display the image.#將圖像顯示在lcd中
識別過程
聯(lián)系:Q,1930299709