Чёрный вывод изображения с камеры. OpenCV Python
Камера работает, во всех приложениях показывает, но в окне OpenCV я получаю чёрное изображение с какими-то артефактами. Скрипт самый стандартный:
import numpy as np
import cv2
cap = cv2.VideoCapture(1)
while True:
ret, frame = cap.read()
cv2.imshow("Video", frame)
img_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
if cv2.waitKey(13) & 0xFF == ord('q'):
# cv2.imwrite('capture.png', frame)
break
cap.release()
cv2.destroyAllWindows()
Ответы (2 шт):
вы уверены, что камера доступна по чтению?
cap = cv.VideoCapture(0) if not cap.isOpened(): print("Cannot open camera") exit()почему стоит 1, а не 0? у вас 2 веб-камеры?
вы уверены. что прочитали кадр с камеры
while True: # Capture frame-by-frame ret, frame = cap.read() # if frame is read correctly ret is True if not ret: print("Can't receive frame (stream end?). Exiting ...") break
Встретился с такой же проблемой. И самое странное вот что. Если запустить код из файла (python my_code.py), то камера не работает (получаем черную картинку (кстати, она не совсем черная, некоторые пиксели в массиве кадра не равны нулю, но это и у вас видно на кадре). Если же запустить тот же самый код интерактивно, то есть напрямую из интерпретатора, то камера работает корректно! Открываем интерактивный режим: "py" (на винде - только на винде такая проблема и есть) и вставляем туда код, все работает!
Что я только не пытался сделать, ничего не помогает. В обоих случаях виртуальное окружение одинаковое. Почему это работает по-разному, не понятно.
Кстати, такое поведение замечено только на некоторых компах (предположительно, более старых) Вот мой код для отладки этого бага
import cv2
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while True:
_, frame = cap.read()
cv2.imshow('wnd2', frame)
k = cv2.waitKey(10)
if k == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
строки
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
использовать не обязательно, но они работают. То есть для этой картинки действительно можно подобрать разные разрешения (если на это способна камера)
