2016-12-11 2 views
0

К сожалению, я вставить зеркало частей на worng месте, и в кадре является недействительным во время зеркальной части, я сделал это в комментарии во время работыпитон OpenCV: не может захватить окно

Похоже, мой cap.read() может 't ничего не читает

Это действительно простой код python для opencv для простого захвата окна и создания веб-камеры. Но когда я его запускал, ни одного окна не показывалось, но никаких ошибок не было. Как я могу узнать, что плохого?

Как я могу узнать, есть ли веб-камера 0 или еще? Почему зеркальная часть не работает? Может ли кто-нибудь порекомендовать мне несколько хороших примеров для opencv на python? спасибо !!

import cv2 

def capture_camera(mirror=True, size=None): 
    cap = cv2.VideoCapture(0) 

    while True: 
     ret, frame = cap.read() 
     #if mirror is True: 
      #frame = frame[:,::-1] 
     if size is not None and len(size) == 200: 
      frame = cv2.resize(frame, size) 
      cv2.imshow('camera capture', frame) 
      k = cv2.waitKey(100) 
      if k == 27: 
       break 
    cap.release() 
    cv2.destroyAllWindows() 

capture_camera() 
+0

Проверьте, является ли 'ret'' True' или 'False' и возвращает ли' cap.isOpened' 'True'. Скорее всего, OpenCV не может найти вашу веб-камеру. –

+0

Спасибо, я думаю, что вы правы, выглядит как ret и frame равными null, или зеркальная часть не будет бросать TypeError ... как я могу ее исправить? Не могли бы вы рассказать мне больше деталей? – Tianyi

ответ

-1

Пробуйте этот код. Это работает для меня:

import cv2 

cap = cv2.VideoCapture(0) 

while True: 
    ret, frame = cap.read() 
    cv2.imshow('Webcam (close with q)' ,frame) 

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

cap.release() 
cv2.destroyAllWindows() 

КСТАТИ: Ваш код выдает ошибку:

Traceback (most recent call last): 
File "C:/Python/Scripts/OpenCV/Scripts/so_test.py", line 21, in <module> 
capture_camera() 
File "C:/Python/Scripts/OpenCV/Scripts/so_test.py", line 7, in capture_camera 
frame = frame[:,::-1] 
UnboundLocalError: local variable 'frame' referenced before assignment 
+0

Ваш код делает то же самое, что и исходный код в вопросе. И нет необходимости импортировать numpy, так как вы не используете его здесь вообще. –

+0

Да, но это работает. Какой код в вопросе, очевидно, не делает. – frankenapps

+0

Не говорите, что ваш код плохой (это не так), но он не отвечает на вопрос, так как он не улучшает исходный код (они делают то же самое), или пытается объяснить, почему он не работает. –

1

Ваш код не executiong ниже, если заявление

if size is not None and len(size) == 200: 

, потому что размер кортежа и LEN (размер) будет возвращаться 2 с тех пор, как вы определили

 size = (800,600) 

Вторая ошибка: вы меняли массив кадров перед его инициализацией. сначала нужно получить массив кадров, который возвращается cap.read(), то вы можете проверить, если зеркало Правда, если да, то обратный массив с помощью кадра = кадр [:, :: - 1]

попробовать этот код:

import cv2 

def capture_camera(mirror=True, size=None): 
    cap = cv2.VideoCapture(0) 

    while True: 
     ret, frame = cap.read() 
     if mirror is True: 
      frame = frame[:,::-1] 

     size = (800,600) 
     if size is not None: 
      frame = cv2.resize(frame, size) 
      cv2.imshow('camera capture', frame) 
      k = cv2.waitKey(100) 
      if k == 27: 
       break 
    cap.release() 
    cv2.destroyAllWindows() 

capture_camera() 
+0

Спасибо за ваш ответ. Это была моя ошибка для вставки неправильного кода .... похоже, что мой cap.read() имеет значение null, и я не знаю, почему .... – Tianyi

+0

http://stackoverflow.com/q/34716709/4287377 здесь op решил его, перекомпилировав библиотеку ffmpeg .. –

Смежные вопросы