我正在通過為 2d 宇宙飛船游戲撰寫機器人來學習 OpenCV 和 Python。
基本原理是我的飛船可以擊殺某些目標,而我的飛船無法擊殺某些目標。一次在螢屏上顯示一個目標,您可以單擊其中一個next或attack根據您要執行的操作而定。在這樣做時,您可以回圈遍歷目標,直到找到要攻擊的目標。
目前我的代碼:
- 將無法擊敗的船舶影像加載到 numpy 陣列中
- 跳過選單的一些 pyautigui 互動
- 檢查 numpy 陣列以確定它是要攻擊還是跳過給定的目標
- 使用 pyautogui 進行點擊攻擊或跳過
這一切都正常作業,機器人愉快地搜索并點擊跳過或攻擊。
我的問題:
正在加載的影像的名稱是人類可讀的,例如,Ship 1.jpg, Ship 2.jpg, Ship 3.jpg當我將它們加載到 numpy 陣列中時,它們會丟失它們的人類可讀組件。
我的問題:
我希望能夠記錄被攻擊的內容以改進檢測,目前我能夠輸出實際的陣列array([[106, 106, 106, ..., 42, 41, 42],,但我似乎無法弄清楚如何保留人類可讀的元素。如何保留人類可讀的元素?
我正在加載這樣的影像:
# Load Images
def loadImages(directory):
# Intialise empty array
image_list = []
# Add images to array
for i in directory:
img = cv.imread(i, cv.IMREAD_REDUCED_GRAYSCALE_2)
image_list.append(img)
return image_list
目標檢測是用cv.matchTemplate
def objectDetection(image_list):
# Object Detection
for i in image_list:
needle_img = i
result = cv.matchTemplate(haystack, needle_img, cv.TM_CCORR_NORMED)
使用來自答案的錯誤更新:
我用它更新了我的loadImages函式,image_list.append((img, i))這很有效,現在我可以在除錯器中看到附加到陣列的附加檔案名。我還更新了物件檢測for i in image_list[i][2]:以選擇陣列物件,但隨后出現以下錯誤:
Exception has occurred: UnboundLocalError
local variable 'i' referenced before assignment
File "C:\Users\test6.py", line 65, in objectDetection
for i in image_list[i][2]:
File "C:\Users\test6.py", line 202, in <module>
objectDetection(ships_to_avoid, 0.9)
uj5u.com熱心網友回復:
您可以將元組附加到串列中。其中第一個元素是名稱,第二個元素是影像。
image_list.append((img, i))
現在“i”代表檔案名,“img”代表影像檔案。您現在可以訪問影像的名稱或以 j 為索引(例如 0)的影像,如下所示:
img_name = image_list[j][1]
img = image_list[j][0]
編輯 1:如果您想訪問串列中的影像以進行物件檢測,請按以下方式重寫:
def objectDetection(image_list):
# Object Detection
for i in image_list:
needle_img = i[0]
needle_name = i[1]
result = cv.matchTemplate(haystack, needle_img, cv.TM_CCORR_NORMED)
編輯 2:修復索引
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425468.html
