Pycharm — Запуск открытого CV-кода переходит прямо к «Процессу, завершенному с кодом выхода 139 (прерван сигналом 11: SIGSEGV)»

#python #opencv #pycharm

#python #opencv #pycharm

Вопрос:

Я пытаюсь запустить open-cv-код, чтобы получить доступ к моей веб-камере в скрипте Python. Однако, когда я пытаюсь его запустить, я получаю «Процесс, завершенный с кодом выхода 139 (прерванный сигналом 11: SIGSEGV)» каждый раз, когда я пытаюсь его запустить. В моем коде нет ошибки, и я также просмотрел другие сообщения, чтобы добавить переменные среды: PYTHONUNBUFFERED=1;PYDEVD_USE_FRAME_EVAL=NO;PYTHONMALLOC=debug Мой код:

 import cv2

# define a video capture object 
vid = cv2.VideoCapture(0)
while (True):
    # Capture the video frame
    # by frame
    ret, frame = vid.read()

    # display the resulting frame
    cv2.imshow('frame', frame)

    # the 'q button is set as the
    # quitting button
    if cv2.waitKey(1) amp; 0xFF == ord('q'):
        break

    # after the loop realse the cap object
    vid.release()
    # destroy all windows
    cv2.destroyAllWindows() 
  

Ответ №1:

Последние две строки должны быть вне цикла while:

 import cv2

# define a video capture object 
vid = cv2.VideoCapture(0)
while (True):
    # Capture the video frame
    # by frame
    ret, frame = vid.read()

    # display the resulting frame
    cv2.imshow('frame', frame)

    # the 'q button is set as the
    # quitting button
    if cv2.waitKey(1) amp; 0xFF == ord('q'):
        break

# after the loop realse the cap object
vid.release()
# destroy all windows
cv2.destroyAllWindows()
  

Комментарии:

1. Чтобы добавить к ответу Sarims. SIGSEGV — это нарушение доступа к памяти, я часто нахожу эту ошибку при использовании кода, который поступает из библиотеки c . По сути, вы пытаетесь получить доступ к ссылке на объект, который был удален.

2. Хорошо, я сделаю это

3. @LewisMorris вы думаете, это из-за моих переменных окружения. Я знаю, что изменил их на днях, чтобы следовать чужому решению, однако это не сработало. Должен ли я просто вернуть их к нормальному состоянию?

4. Это могло бы быть, но тогда почему это должно работать в jupyter, а не в pycharm. Это странный. Вам повезет больше на форумах OpenCV. Хотя, возможно, ответ немного медленнее.

5. Хорошо, спасибо @LewisMorris, я только что это сделал: answers.opencv.org/question/233810 /…

Ответ №2:

Чтобы добавить к этому.

SIGSEGV — это нарушение доступа к памяти, я часто нахожу эту ошибку при использовании кода, который поступает из библиотеки c . По сути, вы пытаетесь получить доступ к объекту в памяти, который был удален, но ссылка на него все еще остается.

Когда вы вызываете эти

 `# after the loop realse the cap object
vid.release()
# destroy all windows
cv2.destroyAllWindows()`
  

Opencv, по сути, должен удалять объект из памяти.

Затем, когда вы выполняете следующую итерацию вашего цикла while, вы пытаетесь получить к ним доступ с помощью этого.

 `ret, frame = vid.read()

# display the resulting frame
cv2.imshow('frame', frame)`
  

Но объекта видеозахвата и окна там нет (но ссылка на объект python остается).).

А затем бум, сбой . Поскольку ему не удается найти объект и он не знает, что делать.