OpenCV:图像数组:如何识别已找到的图像?

OpenCV: An Array of images: How can I identify which image has been found?

我正在通过为 2d 宇宙飞船游戏编写机器人来学习 OpenCV 和 Python。

基本原理就是我的飞船有可以打败的目标,也有不能打败的目标。一次在屏幕上显示一个目标,您可以单击 nextattack,具体取决于您要执行的操作。在这样做时,您可以循环选择目标,直到找到您想要攻击的目标。

目前我的代码:

  1. 将它无法打败的船只图像加载到 numpy 数组中
  2. 跳过菜单的一些 pyautigui 交互
  3. 检查 numpy 数组以确定它是要攻击还是跳过给定的目标
  4. 点击攻击或使用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)

更新错误答案:

我用 image_list.append((img, i)) 更新了我的 loadImages 函数并且它起作用了,我现在可以在调试器中看到附加到数组的附加文件名。我还使用 for i in image_list[i][2]: 将对象检测更新为 select 数组对象,但随后出现以下错误:

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)

您可以将元组附加到列表中。 其中第一个元素是名称,第二个元素是图像。

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:修复了索引