我有一个想要同时运行横向和纵向视频的面部检测程序。但是,当OpenCV加载垂直视频时,它会自动逆时针旋转它(因此人脸检测不起作用);那么有什么方法可以用OpenCV来获得“真实的”视频尺寸,甚至可以在用OpenCV加载之前得到它吗?
我打印了捕获的视频的尺寸,以确保稍后在程序中不旋转视频,但是使用以下代码,并将“ video.mp4”作为垂直视频,其宽度和高度对应于旋转的视频(宽度>高)。
import cv2
vidcap = cv2.VideoCapture("video.mp4")
print("Width: " + str(vidcap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print("Height: " + str(vidcap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
预期输出:
Width: 360.0
Height: 480.0
实际输出:
Width: 480.0
Height: 360.0
编辑: 这是我解决此问题的方法:
我使用了软件包 skvideo 来获取视频元数据。尽管元数据始终通过将最大尺寸显示为“宽度”来指示视频分辨率(这对于垂直视频而言并不正确),但我注意到 metadata.keys()的长度随视频的方向,因为我相信垂直视频会自动旋转。这是我用来检测视频方向的代码:
import skvideo.io
metadata = skvideo.io.ffprobe("video.mp4")
if (len(metadata.keys()) == 3):
vertical = 1
else:
vertical = 0 # if the video is in landscape, metadata.keys() will have a length of 2