El uso de la cámara web con opencv python muestra una pantalla en negro con waitkey ()

Estoy tratando de acceder a una cámara web básica (Logitech c270) a través de opencv python VideoCapture. Desafortunadamente, cada vez que ejecuto el programa, la pantalla se vuelve negra. Sé que la cámara funciona porque puedo ver el video a través de su software. Soy muy consciente de asegurarme de poner la clave de espera (x) para que ese no sea el problema. También tengo este código por si el índice cambia:

for i in range(4):
        capture = cv2.VideoCapture(i)
        if not capture:
            print "UNABLE TO CAPTURE CAMERA"
        else:
            print "taken camera from index: ", i
            break

Pero se devuelve un índice 0 cada vez. Y el problema no es que tenga problemas para encontrarlo porque tengo una parte del código que me dice si la cámara pudo recuperar un marco, por lo que tal vez el problema sea con read (). Finalmente, tal vez el problema es que mi clave de espera está sangrada tanto en mi código, tal vez alrededor de cuatro índices, que no puede hacer referencia a la clave de espera cada vez. Aquí están los fragmentos de mi código que están involucrados en esto. Soy nuevo, así que estoy seguro de que la optimización y la técnica son muy malas.

class ColourTracker(object):
  def __init__(self):
    #cv2.namedWindow("ColourTrackerWindow", cv2.CV_WINDOW_AUTOSIZE)
    self.scale_down = 4
    self.start = time.time()

  def run(self):
    for i in range(4):
        capture = cv2.VideoCapture(i)
        if not capture:
            print "UNABLE TO CAPTURE CAMERA"
        else:
            print "taken camera from index: ", i
            break
    ...

    while True:     
      marker = marker + 1
      if marker % 100 == 0:
          print marker
      f, orig_img = capture.read()
      if not f:
          print "Not read"
          break
      orig_img = cv2.flip(orig_img, 1)
      cv2.imshow('orgImage', orig_img)

      ...

      largest_contour = None
      for idx, contour in enumerate(contours):
        area = cv2.contourArea(contour)
        if area > max_area:
            max_area = area
            largest_contour = contour
        if not largest_contour == None:

            ...

            #create an array of coordinates
            if marker % 10 == 0:
                cycle = [cx,cy,timer]
                coordinates.append(cycle)
            f = h5py.File(fileName, 'a') 
            if moment["m00"] > 1000 / self.scale_down:
                rect = cv2.minAreaRect(largest_contour)
                rect = ((rect[0][0] * self.scale_down, rect[0][1] * self.scale_down), (rect[1][0] * self.scale_down, rect[1][1] * self.scale_down), rect[2])
                box = cv2.cv.BoxPoints(rect)
                box = np.int0(box)
                cv2.drawContours(orig_img,[box], 0, (0, 0, 255), 2)
                cv2.imshow("ColourTrackerWindow", orig_img)
                #out.write(orig_img)
                if cv2.waitKey(20) == 27:                    
                    cv2.destroyAllWindows()

                    ...

                    self.capture.release()
                    #out.release()
                    f.close()   # be CERTAIN to close the file
                    #testing_matrix.close()
                    break
if __name__ == "__main__":
  colour_tracker = ColourTracker()
  colour_tracker.run()

Corté porciones por el bien de la longitud, así que para eso están los "...".

Respuestas a la pregunta(1)

Su respuesta a la pregunta