Wenn Sie eine Webcam mit OpenCV-Python verwenden, wird ein schwarzer Bildschirm mit einem Waitkey () angezeigt.

Ich versuche, über opencv python VideoCapture auf eine einfache Webcam (Logitech c270) zuzugreifen. Leider erscheint der Bildschirm jedes Mal, wenn ich das Programm starte, schwarz. Ich weiß, dass die Kamera funktioniert, weil ich das Video über ihre Software ansehen kann. Mir ist klar, dass ich unbedingt den Waitkey (x) eingeben muss, damit das nicht der Fall ist. Ich habe auch diesen Code für den Fall, dass sich der Index ändert:

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

Aber es wird jedes Mal ein Index von 0 zurückgegeben. Das Problem ist nicht, dass es Probleme gibt, es zu finden, da ich einen Teil des Codes habe, der mir sagt, ob die Kamera ein Bild abrufen konnte. Vielleicht liegt das Problem also bei read (). Schließlich besteht das Problem möglicherweise darin, dass mein Warteschlüssel so stark in meinen Code eingerückt ist, dass er möglicherweise nicht jedes Mal auf den Warteschlüssel verweisen kann. Hier sind die Teile meines Codes, die daran beteiligt sind. Ich bin neu, also bin ich sicher, dass die Optimierung und Technik sehr schlecht sind.

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

Ich schneide Teile der Länge halber aus, also ist das, wofür die "..." sind.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage