(OpenCV с Python) Нежелательное поведение авторотации при использовании VideoCapture (1) / Внешняя веб-камера

#python #opencv #rotation #video-capture #gopro

#python #opencv #поворот #видеозахват #gopro

Вопрос:

Я пытаюсь отобразить видео с моей веб-камеры (GoPro 8) на компьютер с помощью OpenCV, но мне не нужна функция авторотации — под этим я подразумеваю, что когда я переключаюсь с удержания GoPro с альбомной ориентации на портретную (скажем, повернутую на 90 градусов), я хочу, чтобы отображаемое изображение на моем компьютере отображалосьповернутый вид в альбомной ориентации.

Изображение, отображаемое на компьютере при удерживании в альбомной ориентации

Изображение отображается на компьютере при удерживании в портретном положении

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

Вот мой код:

 video = cv2.VideoCapture(1)
cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)

while(True):
   ret, frame = video.read()
   if ret == True:
      flipped = cv2.flip(frame, 1) #flip frame vertically, I want it flipped for other reasons
      cv2.imshow('window', flipped)
   if cv2.waitKey(1) amp; 0xFF == ord('q') :
      break
cv2.destroyAllWindows()
 

Могу ли я каким-либо образом игнорировать ориентацию внешней веб-камеры? Я попытался повернуть изображения с помощью cv2.rotate(), но это не то, что я хочу.

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

1. в конце концов, вы можете сравнить height > width , чтобы распознать portrait , а затем повернуть его с помощью cv2.rotate()

2. кажется, что cv2 имеет свойство CAP_PROP_ORIENTATION_META , но я не знаю, дает ли оно информацию о повороте камеры. Но даже если он дает информацию о повороте, вам все равно нужно будет использовать cv2.rotate()

Ответ №1:

Я думаю, что лучшим решением является использование cv2.rotate таким образом, вы можете получить желаемый результат. Кстати, я использую веб-камеру Logitech 720p, и когда я перевожу ее в портретное положение, она выдает желаемый результат без использования какой-либо функции python, и вот код для вашего вывода с использованием cv2.rotate ()

 import cv2
import numpy as np
cap = cv2.VideoCapture (0)

width = 400
height = 350

while True:
    ret, frame = cap.read()
    frame = cv2.resize(frame, (width, height))
    flipped = cv2.flip(frame, 1)
    framerot = cv2.rotate(frame, cv2.ROTATE_90_COUNTERCLOCKWISE)
    framerot = cv2.resize(framerot, (width, height))
    StackImg = np.hstack([frame, flipped, framerot])
    cv2.imshow("ImageStacked", StackImg)
    if cv2.waitKey(1) amp; 0xff == ord('q'):
        break
cv2.destroyAllWindows()
 

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

1. Спасибо, вы заставили меня понять, что проблема вполне может быть в том, что GoPro внутренне переворачивает изображение.

2. Я рад, что вы получили некоторую помощь 🙂