En Python / OpenCV, ¿hay una manera de desplazarse rápidamente a través de los fotogtwigs de un video, permitiendo que el usuario seleccione el fotogtwig de inicio y final para ser procesado?

Al prepararme para procesar un video quiero que el usuario pueda seleccionar el primer y último fotogtwig que se procesará en el video. La barra de seguimiento parece ser una herramienta útil para hacer esto, pero ¿puedo usarla para leer y mostrar fotogtwigs específicos de un video?

Normalmente, leo un video fotogtwig a fotogtwig y ejecuto mi algoritmo de procesamiento en él, usando un bucle while:

cap = cv2.VideoCapture('myvideo.mp4') while(cap.isOpened()): ret, frame = cap.read() # .... 

Esto no es propicio para que el usuario escanee rápidamente el video para encontrar un buen intervalo de cuadros para procesar.

La barra de seguimiento es excelente para configurar los parámetros de procesamiento de imágenes, pero si hay una mejor herramienta que pueda imaginar, sugiérala. A continuación puede ver un código para establecer una variable de nivel de umbral utilizando una barra de seguimiento.

 def onTrackbarChange(trackbarValue): pass cv2.createTrackbar( 'threshold level', 'mywindow', 100, 255, onTrackbarChange ) thresholdlevel = cv2.getTrackbarPos('thresh','mywindow') 

¿Hay una manera de hacer algo como esto?

 start_frame = cv2.getTrackbarPos('start-frame','mywindow') ret, frame = cap.read(start_frame) #don't think this is possible cv2.imshow('window', frame) 

Lo ideal sería que hubiera dos paneles de ventana, uno con el stop_frame y otro con el stop_frame , cada uno controlado por una barra de seguimiento.

En primer lugar, puede establecer la posición del video con:

 cap.set(cv2.CAP_PROP_POS_FRAMES,pos) 

luego solo se juntan las piezas, deja que jueguen con las barras de seguimiento, cuando se presiona una tecla, toca el intervalo:

 import cv2 cap = cv2.VideoCapture('david.mpg') length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) def onChange(trackbarValue): cap.set(cv2.CAP_PROP_POS_FRAMES,trackbarValue) err,img = cap.read() cv2.imshow("mywindow", img) pass cv2.namedWindow('mywindow') cv2.createTrackbar( 'start', 'mywindow', 0, length, onChange ) cv2.createTrackbar( 'end' , 'mywindow', 100, length, onChange ) onChange(0) cv2.waitKey() start = cv2.getTrackbarPos('start','mywindow') end = cv2.getTrackbarPos('end','mywindow') if start >= end: raise Exception("start must be less than end") cap.set(cv2.CAP_PROP_POS_FRAMES,start) while cap.isOpened(): err,img = cap.read() if cap.get(cv2.CAP_PROP_POS_FRAMES) >= end: break cv2.imshow("mywindow", img) k = cv2.waitKey(10) & 0xff if k==27: break