Я пытаюсь применить перспективную деформацию к видео с помощью opencv, а затем отобразить его с помощью метки в tkinter. Однако, когда код запускается, видео импортируется, однако оно не отображается, окно просто закрывается, и сообщения об ошибках не выдаются.
def perspective():
file = askopenfilename()
cap = cv2.VideoCapture(file)
def main():
ret, img1 = cap.read()
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
rows, columns, channels = img1.shape
point1 = np.float32([[200, 200], [440, 200], [0, 360], [640, 360]])
point2 = np.float32([[0, 0], [640, 0], [0, 360], [640, 360]])
P = cv2.getPerspectiveTransform(point1, point2)
output = cv2.warpPerspective(img1, P, (640, 360))
img = Image.fromarray(output)
imgtk = ImageTk.PhotoImage(image = img)
vid_original = Label(root)
vid_original.grid(row=1, column=0, padx=(150, 20), pady=2)
vid_original.imgtk = imgtk
vid_original.configure(image=imgtk)
vid_original.after(10, main)
main()
if __name__ == "__main__":
perspective()
Tk, как и любой графический интерфейс, должен запускать цикл сообщений.
пожалуйста, найдите и следуйте руководствам по Tk/tkinter, которые покажут вам основы.
в качестве альтернативы не используйте tkinter, а используйте cv2.imshow
и cv2.waitKey
(которые вращают цикл сообщений).