python中的OpenCV waitKey在Mac上不起作用

时间:2019-01-20 15:12:11

标签: python opencv cv2

我正在用python编写人脸识别代码,并在Mac(PyCharm)上使用Open CV。 我不明白为什么:

            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

在Mac上不起作用,但是在Windows上,此代码有效。 特别是q不会触发if。

我尝试更改:  k = cv2.waitKey(0)  如果k == 27:      打破

下面写我的代码

def run(self):
    video_capture = cv2.VideoCapture(0)
    try:
        while self.active:
            # Grab a single frame of video
            ret, frame = video_capture.read()

            # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
            rgb_frame = frame[:, :, ::-1]

            # Find all the faces and face enqcodings in the frame of video
            face_locations = face_recognition.face_locations(rgb_frame)
            face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)

            # Loop through each face in this frame of video
            for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
                # See if the face is a match for the known face(s)
                matches = face_recognition.compare_faces(self.known_face_encodings, face_encoding)

                name = "Unknown"

                # If a match was found in known_face_encodings, just use the first one.
                if True in matches:
                    first_match_index = matches.index(True)
                    name = self.known_face_names[first_match_index]

                # Draw a box around the face
                cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

                # Draw a label with a name below the face
                cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
                font = cv2.FONT_HERSHEY_DUPLEX
                cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
                if (name != "Unknown"):
                    self.reco.emit(name)
                    self.deactivate()
                    video_capture.release()
                    cv2.destroyAllWindows()
                else:
                    self.unreco.emit()
                    self.deactivate()
                    video_capture.release()
                    cv2.destroyAllWindows()
            # Display the resulting image
            # cv2.imshow('Video', frame)
            # Hit 'q' on the keyboard to quit!
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    except:
        print("error while recognize")

0 个答案:

没有答案