- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是,当我使用 opencv 将视频提取到帧中时,有时我得到的帧会翻转,这在我的机器(窗口)和 VM(ubuntu)上都发生过,但是我的一些视频经测试,框架不翻转。所以,我想知道应该在我的代码中更改/添加哪些因素或哪些内容,以使提取内容无需翻转即可修复
def extract_frame(video,folder):
global fps
os.mkdir('./green_frame/{folder}/'.format(folder=folder))
vidcap = cv2.VideoCapture(video)
success,image = vidcap.read()
fps = vidcap.get(cv2.CAP_PROP_FPS)
count = 0
success = True
while success: #os.path.join(pathOut,(name+'.png'))
cv2.imwrite(os.path.join('./green_frame/{folder}/'.format(folder=folder),"frame%d.png" % count), image)
success,image = vidcap.read()
print('Read a new frame: ', success)
count += 1
这是我从这段代码中获得的框架示例。 我使用的原始视频是颠倒的,如下所示:
所以,就我而言,我必须改变什么才能使它不像我的第一张照片那样翻转。与视频的分辨率或帧率有关吗?我用 1280x720 分辨率的视频进行测试,提取的所有帧都上下翻转,但 568x320 视频中的帧是正常的
谢谢
编辑:所以,我查看了视频的信息,发现在元数据中,它为提取到颠倒帧的视频旋转了180度 但是当我检查产生非颠倒框架的普通视频时,它没有旋转:180
因此,我该如何处理具有旋转的视频?
最佳答案
2022 年 9 月 28 日更新
现在只需更新到 OpenCV v4.5 及更高版本即可解决此问题。
如果升级出现问题,请按照下面的旧答案进行操作。
<小时/>对于仍在研究这个问题的人来说,我只是陷入了同样的问题。事实证明,一些 Android 手机和 iPhone 会横向拍摄图像/帧,并根据 exif“旋转”标签即时转换它们以显示图像/帧。
OpenCV 中奇怪的设计选择是 cv2.imread(img_file)
已经通过读取图像的 rotate
标签以正确的方向读取图像,但是 cv2 .VideoStream
的 read()
方法不会执行此操作。
因此,为了解决这个问题,我使用 ffmpeg
读取“旋转”标签并将视频帧旋转到正确的方向。(非常感谢上面的评论,为我指明了正确的方向👍)
代码如下:
确保您有用于 Python 的 ffmpeg
。 (pip 安装 ffmpeg-python
)
创建一个方法来检查 video_file 是否需要旋转:
import ffmpeg
def check_rotation(path_video_file):
# this returns meta-data of the video file in form of a dictionary
meta_dict = ffmpeg.probe(path_video_file)
# from the dictionary, meta_dict['streams'][0]['tags']['rotate'] is the key
# we are looking for
rotateCode = None
if int(meta_dict['streams'][0]['tags']['rotate']) == 90:
rotateCode = cv2.ROTATE_90_CLOCKWISE
elif int(meta_dict['streams'][0]['tags']['rotate']) == 180:
rotateCode = cv2.ROTATE_180
elif int(meta_dict['streams'][0]['tags']['rotate']) == 270:
rotateCode = cv2.ROTATE_90_COUNTERCLOCKWISE
return rotateCode
创建一个方法来纠正视频文件中帧的旋转:
def correct_rotation(frame, rotateCode):
return cv2.rotate(frame, rotateCode)
最后,在主循环中执行此操作:
# open a pointer to the video file stream
vs = cv2.VideoCapture(video_path)
# check if video requires rotation
rotateCode = check_rotation(video_path)
# loop over frames from the video file stream
while True:
# grab the frame from the file
grabbed, frame = vs.read()
# if frame not grabbed -> end of the video
if not grabbed:
break
# check if the frame needs to be rotated
if rotateCode is not None:
frame = correct_rotation(frame, rotateCode)
# now your logic can start from here
希望这有帮助🍻
关于python - 提取后视频帧是颠倒的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53097092/
我正在尝试将我的本地功能分支 rebase 到名为“集成”的远程分支上。 所以我做了- git checkout feature git rebase integration 但在我的冲突解决编辑器中
我想使用模板来反转 XML 的不同序列; 例如 :
我正在尝试使用 Django 1.8 构建我的博客,但是我不知道如何订购这些博客。看图 我想在底部显示“最早”,在顶部显示“最新”。这是我的 index.html {% extends 'layout
我正在使用 socket.io 并向客户端发送一条消息,其中包含应附加到 div 的数据: socket.on('new data', function(data){ $('#containe
如果我遗漏了明显的内容,我深表歉意...... 我正在使用 rgl 绘制 3d 曲面。我的代码是 library(rgl) dem1 = read.table(file="file.txt",skip
如何使用纯 CSS 反转 div 子元素的顺序? 例如: 我要 A B C D 显示为: D C B A 我在 JSfiddle 上创建了一个演示: http://
是否反转中的属性 到 削弱或以任何方式影响搜索引擎索引页面的能力? 谢谢:) 最佳答案 我们不可能知道。搜索引擎可能有错误。 但从 HTML 规范的角度来看,不,属性顺序不影响含义。 关于html
我正在使用 CABasicAnimation 绘制我在数组中使用 CAShapeLayer 的所有 UIBezierPaths CAShapeLayer *shapeLayer = [CAShapeL
我在我的 iPhone 应用程序中使用 core plot 1.0。一切正常,图表绘制完美,但我面临一个奇怪的问题,即图表页面 (CPTPGraphHostingView) 上的所有控件都被镜像。 即
我是一名优秀的程序员,十分优秀!