#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 остается).).
А затем бум, сбой . Поскольку ему не удается найти объект и он не знает, что делать.