O uso da webcam com o opencv python mostra uma tela preta com waitkey ()

Estou tentando acessar uma webcam básica (Logitech c270) através do VideoCapture opencv python. Infelizmente, porém, toda vez que executo o programa, a tela fica preta. Eu sei que a câmera funciona porque eu posso ver o vídeo através do software deles. Estou ciente de ter certeza de inserir a tecla wait (x), para que esse não seja o problema. Eu também tenho esse código caso o índice mude:

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

Mas ele retorna um índice 0 a cada vez. E o problema não é que ele esteja tendo problemas para encontrá-lo, porque eu tenho uma parte do código para me dizer se a câmera conseguiu recuperar um quadro, então talvez o problema seja com read (). Finalmente, talvez o problema seja que minha chave de espera seja recuada tanto no meu código, talvez com cerca de quatro índices, que não consiga fazer referência à tecla de espera a cada vez. Aqui estão os pedaços do meu código que estão envolvidos nisso. Sou novo, por isso tenho certeza de que a otimização e a técnica são muito ruins.

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()

Cortei porções por motivos de comprimento, e é para isso que servem o "...".

questionAnswers(1)

yourAnswerToTheQuestion