#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. Я рад, что вы получили некоторую помощь 🙂