Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.2K
Vistas
OpenCV VideoCapture devuelve un desplazamiento de cuadro extraño para diferentes versiones

Estoy usando opencv-python y cuando ejecuto el siguiente código:

 index = 0 cap = cv2.VideoCapture(video_path) while True: offset = cap.get(cv2.CAP_PROP_POS_MSEC) print(cv2.__version__, index, offset) ok, frame = cap.read() if not ok: break index += 1

Obtengo el siguiente resultado:

 3.4.7 0 0.0 3.4.7 1 33.36666666666667 3.4.7 2 66.73333333333333 3.4.7 3 100.10000000000001 3.4.7 4 133.46666666666667

Si ejecuto este código en la versión 3.4.8.29 , obtengo el siguiente resultado:

 3.4.8 0 0.0 3.4.8 1 0.0 3.4.8 2 33.36666666666667 3.4.8 3 66.73333333333333 3.4.8 4 100.10000000000001

Y si lo ejecuto en la versión 4.5.2.52 obtengo:

 4.5.2 0 0.0 4.5.2 1 0.0 4.5.2 2 0.0 4.5.2 3 0.0 4.5.2 4 0.0

La pregunta es en primer lugar, ¿cuál es la correcta? Parece que 3.4.7 es correcto, pero también parece estar cambiando aleatoriamente entre versiones.

Y también, ¿cómo puedo modificar las otras versiones para obtener el resultado adecuado, igual que 3.4.7

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Leí los documentos de OpenCV y dijeron: "Las propiedades de lectura/escritura involucran muchas capas. Es posible que ocurra algún resultado inesperado a lo largo de esta cadena. El comportamiento efectivo depende del hardware del dispositivo, el controlador y el API Backend". (fuente: https://docs.opencv.org/3.4.15/d4/d15/group__videoio__flags__base.html#gaeb8dd9c89c10a5c63c139bf7c4f5704d )

Entonces, en otras palabras, OpenCV no garantiza un comportamiento consistente y confiable de esta función.

También instalé openCV 4.5.2.52 y apliqué su script a uno de mis videos '.mp4'. Luego obtuve el mismo resultado que tenía para openCV versión 3.4.8.29. Entonces, creo que el comportamiento que experimenta no es un 'error', sino el comportamiento poco confiable de esta función.

Como solución alternativa, puede calcular el "desplazamiento" dividiendo el número de cuadro por el recuento de FPS (consulte el código a continuación). Entonces tienes más control sobre el comportamiento y quizás resultados más consistentes.

 index = 0 cap = cv2.VideoCapture(video_path) fps = cap.get(cv2.CAP_PROP_FPS) while True: offset = cap.get(cv2.CAP_PROP_POS_MSEC) ok, frame = cap.read() if not ok: break # CAP_PROP_POS_MSEC print("CAP_PROP_POS_MSEC: ", index, offset) # Devide fps by frame number offset = cap.get(cv2.CAP_PROP_POS_FRAMES) / fps * 1000 print("cv2.CAP_PROP_POS_FRAMES", index, offset) index += 1
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda