Я загружаю базовое изображение в 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!