gpt4 book ai didi

python - 如何使用 OpenCV 旋转视频

转载 作者:太空狗 更新时间:2023-10-29 22:08:18 24 4
gpt4 key购买 nike

如何使用 OpenCV 旋转视频流中的所有帧?我尝试使用 similar question 中提供的代码,但它似乎不适用于返回 cv.RetrieveFrame 的 Iplimage 图像对象。

这是我目前拥有的代码:

import cv, cv2
import numpy as np

def rotateImage(image, angle):
if hasattr(image, 'shape'):
image_center = tuple(np.array(image.shape)/2)
shape = image.shape
elif hasattr(image, 'width') and hasattr(image, 'height'):
image_center = (image.width/2, image.height/2)
shape = np.array((image.width, image.height))
else:
raise Exception, 'Unable to acquire dimensions of image for type %s.' % (type(image),)
rot_mat = cv2.getRotationMatrix2D(image_center, angle,1.0)
result = cv2.warpAffine(image, rot_mat, shape, flags=cv2.INTER_LINEAR)
return result

cap = cv.CaptureFromCAM(cam_index)
#cap = cv.CaptureFromFile(path)
fps = 24
width = int(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_WIDTH))
height = int(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_HEIGHT))

fourcc = cv.CV_FOURCC('P','I','M','1') #is a MPEG-1 codec

writer = cv.CreateVideoWriter('out.avi', fourcc, fps, (width, height), 1)
max_i = 90
for i in xrange(max_i):
print i,max_i
cv.GrabFrame(cap)
frame = cv.RetrieveFrame(cap)
frame = rotateImage(frame, 180)
cv.WriteFrame(writer, frame)

但这只会给出错误:

  File "test.py", line 43, in <module>
frame = rotateImage(frame, 180)
File "test_record_room.py", line 26, in rotateImage
result = cv2.warpAffine(image, rot_mat, shape, flags=cv2.INTER_LINEAR)
TypeError: <unknown> is not a numpy array

大概是因为 warpAffine 采用 CvMat 而不是 Iplimage。根据C++ cheatsheet ,在两者之间进行转换是微不足道的,但我找不到任何关于在 Python 中进行等效操作的文档。如何在 Python 中将 Iplimage 转换为 Mat?

最佳答案

如果只是旋转180度,可以在两个轴上使用Flip

替换:

frame = rotateImage(frame, 180)

与:

cv.Flip(frame, flipMode=-1)

这是“就位”的,所以速度很快,您将不再需要 rotateImage 函数:)

例子:

import cv
orig = cv.LoadImage("rot.png")
cv.Flip(orig, flipMode=-1)
cv.ShowImage('180_rotation', orig)
cv.WaitKey(0)

这个: enter image description here变成,这个:enter image description here

关于python - 如何使用 OpenCV 旋转视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10559035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com