@JRBRO

Python, OpenCV, tkinter все окна в одном, как реализовать?

Есть скрипт, который генерирует 4 изображения, соответственно создает 4 окна. Я бы хотел, засунуть все эти 4 изображения в интерфейс, желательно с кнопками. Какое это может быть решение?

Что я хочу видеть в интерфейсе:
Маленький текстовый блок
Кнопка выполняющая функцию cv2.waitKey
4 изображения cv2.imshow

По кнопкам особых затруднений нет, а вот как засунуть изображения- такое я не нашел
Знаю что можно реализовать несколько изображений горизонтально, либо вертикально, а меня интересует имено сетка из 4.
Знаю как засунуть одно изображение в tkinter, но интересует больше.

РЕШЕНИЕ С ОДНИМ ИЗОБРАЖЕНИЕМ
image_name = 'Grid.png'

image = cv2.imread(image_name)

#Rearrang the color channel
b,g,r = cv2.split(image)
img = cv2.merge((r,g,b))

# A root window for displaying objects
root = Tk()  

# Convert the Image object into a TkPhoto object
im = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=im) 

# Put it in the display window
Label(root, image=imgtk).pack() 

root.mainloop() # Start the GUI


РЕШЕНИЕ В ЛИНЕЙКУ
# concatenate image Horizontally
Hori = np.concatenate((img1, img2), axis=1)
 
# concatenate image Vertically
Verti = np.concatenate((img1, img2), axis=0)
 
cv2.imshow('HORIZONTAL', Hori)
cv2.imshow('VERTICAL', Verti)
  • Вопрос задан
  • 365 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ну так собери изображения в одно, в чём проблема?
Пусть ты хочешь сделать такую сетку:
A B
C D

Тогда ширина итогового изображения R будет max(A.shape[1]+B.shape[1], C.shape[1]+D.shape[1]), а высота max(A.shape[0]+C.shape[0], B.shape[0]+D.shape[0])
Отступ по X для изображений B и D будет max(A.shape[1], C.shape[1]), отступ по Y для C и D будет max(A.shape[0], B.shape[0]).
Ну а перенос прямоугольной области из массива в массив в numpy делается тривиально.
R[0:A.shape[0], 0:A.shape[1]] = A
R[0:B.shape[0], X:X+B.shape[1]] = B
R[Y:Y+C.shape[0], 0:C.shape[1]] = C
R[Y:Y+D.shape[0], X:X+D.shape[1]] = D
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы