gpt4 book ai didi

python - 使用 OpenCV 在 Python 中迭代 CvMat 的最快方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:09 25 4
gpt4 key购买 nike

我正在使用 OpenCV 和 Python 来处理视频流。我想实现自己的算法,所以我需要遍历每一帧。

到目前为止,我所拥有的一切都有效,但速度太慢,无法实现实时。我知道 Python 不是最高效的编程语言,但考虑到内置的图像转换函数非常快,我相信它可以做得更好。 Numpy 可能是要走的路,但我还不熟悉它。

import cv, numpy
vidFile = cv.CaptureFromFile( 'sample.avi' )
nFrames = int( cv.GetCaptureProperty( vidFile, cv.CV_CAP_PROP_FRAME_COUNT ) )
for f in xrange( nFrames ):
frameImg = cv.QueryFrame( vidFile )
frameMat=cv.GetMat(frameImg)
print "mat ", mat[3,1]
for x in xrange(frameMat.cols):
for y in xrange(frameMat.rows):
# just an example, multiply all 3 components by 0.5
frameMat[y, x] = tuple(c*0.5 for c in frameMat[y, x])
cv.ShowImage( "My Video Window", frameMat )
if cv.WaitKey( waitPerFrameInMillisec ) == 27:
break

我怎样才能加快这个过程?谢谢,b_m

最佳答案

OpenCV 有很好的 python 文档 here .基本上,您应该始终尝试使用这些内置的 opencv 函数或 numpy 对视频帧进行操作。对于帧处理,请查看 operations on arrays ,使用它您可以逐个像素地替换整个像素处理循环,这是非常慢的:

frameMat=cv.GetMat(frameImg)
print "mat ", mat[3,1]
for x in xrange(frameMat.cols):
for y in xrange(frameMat.rows):
# just an example, multiply all 3 components by 0.5
frameMat[y, x] = tuple(c*0.5 for c in frameMat[y, x])
cv.ShowImage( "My Video Window", frameMat )

与:

cv.ConvertScale(frameImg, frameImg, scale=0.5)
cv.ShowImage( "My Video Window", frameImg )

并且轻松实时播放,有很多很酷的功能可以让您合并视频等。

关于python - 使用 OpenCV 在 Python 中迭代 CvMat 的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841900/

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