2

我正在尝试使用 OpenCV 将我的网络摄像头(GoPro 8)视频显示到计算机上,但我不想要自动旋转功能——我的意思是当我从手持 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) & 0xFF == ord('q') :
      break
cv2.destroyAllWindows()

有什么办法可以忽略外部网络摄像头的方向?我尝试使用 cv2.rotate() 旋转图像,但这不是我想要的。

4

1 回答 1

2

我认为最好的解决方案是以这种方式使用 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) & 0xff == ord('q'):
        break
cv2.destroyAllWindows()
于 2020-12-23T05:49:40.707 回答