usar una mostrar leer imagen grises escala ejemplos crear con como abrir python opencv webcam

una - python webcam



Mostrar una fuente de webcam usando OpenCV y Python (6)

Al igual que en el opencv-doc , puede obtener la alimentación de video de una cámara que está conectada a su computadora siguiendo el código.

import numpy as np import cv2 cap = cv2.VideoCapture(0) while(True): # Capture frame-by-frame ret, frame = cap.read() # Our operations on the frame come here gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Display the resulting frame cv2.imshow(''frame'',gray) if cv2.waitKey(1) & 0xFF == ord(''q''): break # When everything done, release the capture cap.release() cv2.destroyAllWindows()

Puede cambiar el índice cap = cv2.VideoCapture(0) de 0 a 1 para acceder a la 2da cámara.
Probado en opencv-3.2.0

He intentado crear un programa simple con Python que usa OpenCV para obtener un video de mi cámara web y mostrarlo en la pantalla.

Sé que estoy parcialmente allí porque se creó la ventana y se enciende la luz de la cámara web, pero parece que no se ve nada en la ventana. Espero que alguien pueda explicar lo que estoy haciendo mal.

import cv cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE) capture = cv.CaptureFromCAM(0) def repeat(): frame = cv.QueryFrame(capture) cv.ShowImage("w1", frame) while True: repeat()

En una nota no relacionada, me he dado cuenta de que mi cámara web a veces cambia su número de índice en cv.CaptureFromCAM , y a veces tengo que poner 0, 1 o 2 aunque solo tengo una cámara conectada y no la he desenchufado (I saber porque la luz no se enciende a menos que cambie el índice). ¿Hay alguna manera de que Python determine el índice correcto?


Intente agregar la línea c = cv.WaitKey(10) en la parte inferior de su método repeat() .

Esto espera 10 ms para que el usuario ingrese una clave. Incluso si no está usando la clave en absoluto, póngala. Creo que solo hubo un poco de retraso, por time.sleep(10) que también puede funcionar time.sleep(10) .

En cuanto al índice de la cámara, podrías hacer algo como esto:

for i in range(3): capture = cv.CaptureFromCAM(i) if capture: break

Esto encontrará el índice del primer dispositivo de captura "en funcionamiento", al menos para índices de 0-2. Es posible que haya varios dispositivos en su computadora reconocidos como un dispositivo de captura adecuado. La única manera que conozco para confirmar que tienes la correcta es mirando manualmente tu luz. Tal vez obtener una imagen y comprobar sus propiedades?

Para agregar un mensaje de usuario al proceso, puede vincular una tecla para cambiar de cámara en su ciclo de repetición:

import cv cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE) camera_index = 0 capture = cv.CaptureFromCAM(camera_index) def repeat(): global capture #declare as globals since we are assigning to them now global camera_index frame = cv.QueryFrame(capture) cv.ShowImage("w1", frame) c = cv.WaitKey(10) if(c=="n"): #in "n" key is pressed while the popup window is in focus camera_index += 1 #try the next camera index capture = cv.CaptureFromCAM(camera_index) if not capture: #if the next camera index didn''t work, reset to 0. camera_index = 0 capture = cv.CaptureFromCAM(camera_index) while True: repeat()

descargo de responsabilidad: no he probado esto, por lo que puede tener errores o simplemente no funciona, pero podría darle al menos una idea de una solución alternativa.


Prueba lo siguiente. Es simple, pero aún no he descubierto una forma elegante de salir.

import cv2.cv as cv import time cv.NamedWindow("camera", 0) capture = cv.CaptureFromCAM(0) while True: img = cv.QueryFrame(capture) cv.ShowImage("camera", img) if cv.WaitKey(10) == 27: break cv.DestroyAllWindows()


Si solo tiene una cámara, o si no le importa cuál cámara es la correcta, utilice "-1" como índice. Es decir, para su ejemplo capture = cv.CaptureFromCAM(-1) .


Una actualización para mostrar cómo hacerlo en las versiones recientes de OpenCV:

import cv2 cv2.namedWindow("preview") vc = cv2.VideoCapture(0) if vc.isOpened(): # try to get the first frame rval, frame = vc.read() else: rval = False while rval: cv2.imshow("preview", frame) rval, frame = vc.read() key = cv2.waitKey(20) if key == 27: # exit on ESC break cv2.destroyWindow("preview") vc.release()

Funciona en OpenCV-2.4.2 para mí.


cambie import cv para import cv2.cv as cv Vea también la publicación here .