Как читать ImageTk.PhotoImage с помощью opencv - PullRequest
0 голосов
/ 21 июня 2019

Я загружаю базовое изображение в ImageTk.PhotoImage, затем я использую это изображение для запуска функции соответствия шаблонов opencv, пока она работает ... но мне нужно будет проверить несколько шаблонов, и я хотел бычтобы создать прямоугольники шаблонов в одном и том же результирующем изображении, как я могу использовать opencv для чтения изображения из ImageTk.PhotoImage?

Хорошо ... Я думаю, что мне нужно будет пойти в обратном направлении, трансформируя PhotoImageсодержимое в массив ... но я не знаю, как это сделать!

Загрузить изображение в PhotoImage

def select_BaseImage():
    global imgBase, imgBasePath
    path = filedialog.askopenfilename()
    if len(path) > 0:
        imgBasePath = path
        image = cv2.imread(path)
        image = Image.fromarray(image)
        image = ImageTk.PhotoImage(image)

        if imgBase is None:
            imgBase = Label(image=image)
            imgBase.image = image
            imgBase.pack(side="left", padx=10, pady=10)
        # otherwise, update the image panels
        else:
            # update the pannels
            imgBase.configure(image=image)
            imgBase.image = image

Обработать изображение

def process_Image():
    img = cv2.imread(imgBasePath,0)
    template = cv2.imread(imgTargetPath,0)
    w, h = template.shape[::-1]

    # Apply template Matching
    res = cv2.matchTemplate(img,template,cv2.TM_CCORR_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    top_left = max_loc
    bottom_right = (top_left[0] + w, top_left[1] + h)

    # Show the result
    image = cv2.imread(imgBasePath)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    cv2.rectangle(image,top_left, bottom_right, (0,255,0), 2)
    image = Image.fromarray(image)
    image = ImageTk.PhotoImage(image)
    imgBase.configure(image=image)
    imgBase.image = image

Загрузитьшаблоны

def process_Script():
    itemList = script.sections()
    for item in itemList:
        select_TargetImage(script.get(item, 'Name')+".jpg")
        process_Image()

Если есть другой способ сделать это, будет полезно, я новичок в python и opencv!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...