Размер видеофайла и размер окна канала веб-камеры в реальном времени в OpenCV Python - PullRequest
0 голосов
/ 25 октября 2019

У меня есть код Python, открывающий веб-камеру в реальном времени, и я могу транслировать видео. Ниже приведен код:

import cv2

vcap = cv2.VideoCapture(1)
while(1):
    ret, frame = vcap.read()

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

vcap.release()
cv2.destroyAllWindows()

Окно, которое появляется и показывает видео с веб-камеры в реальном времени, довольно маленькое. Но если я проигрываю видеофайл, используя приведенный выше код, окно, которое появляется, имеет довольно большой размер. В приведенном выше коде я не упоминаю ничего, чтобы изменить размер окна.

Почему это различие?

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Как видно из документации здесь , первый аргумент imshow() - это имя окна. Если вы явно не создадите окно с таким именем до вызова imshow(), OpenCV создаст окно с установленным флагом CV_WINDOW_AUTOSIZE, что означает, что он покажет frame с его исходным размером. Так что, если у вас разные кадры, размер окна также будет другим. Чтобы сделать окна меньше, чем вы можете сделать, создайте окно с установленным флагом WINDOW_NORMAL, который позволяет вам установить размер окна. Таким образом, вы можете сделать что-то вроде этого:

cv2.namedWindow("Window", cv2.WINDOW_NORMAL)
# set your desired size
cv2.resizeWindow('Window', width, height)
cv2.imshow('Window', frame)
0 голосов
/ 25 октября 2019

Разница заключается в исходном размере изображений. То есть изображение, полученное камерой, меньше, чем у видеофайла.

Чтобы уменьшить размер окна, вы можете изменить размер изображения, полученного из видео. Код:

ret, frame = vcap.read()
frame = cv2.resize(frame, None, None, fx=0.5, fy=0.5)

Для более подробной информации, вы можете обратиться к изменить размер

=== Дополнительные документы ===
Функция imshow отображаетизображение в указанном окне. Если окно было создано с флагом cv :: WINDOW_AUTOSIZE, изображение отображается с его оригинальным размером, однако оно все еще ограничено разрешением экрана. В противном случае изображение масштабируется по размеру окна. Если окно не было создано до этой функции, как вы это сделали, предполагается, что вы создаете окно с помощью cv :: WINDOW_AUTOSIZE. Вы можете обратиться к imshow для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...