私はビデオストリームを処理するためにPythonでOpenCVを使用しています。独自のアルゴリズムを実装したいので、各フレームを繰り返し処理する必要があります。OpenCVを使用してPythonでCvMatを反復する最も速い方法は何ですか?
私はこれまでのところ動作していますが、リアルタイムでは遅すぎます。私はPythonが最も効率的なプログラミング言語ではないことを知っていますが、組み込みの画像変換関数は非常に高速であるため、これよりもはるかに優れていると考えています。ナンシーは行く方法かもしれないが、私はまだそれに精通していない。
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
これは正しい方法だと私は知っていますが、今は配列をループせずに実行できない操作を行う必要があります。まあ、それは可能かもしれませんが、私はそれを理解する方法はありません。たとえば、イメージの最初の(左上)赤のピクセルはどのようにして見つけられますか?これらのものは、ループを持つケーキの一片でしょう。 –
@b_m - 'frameImg [0,0]'は左上のピクセルのRGB値を与えます。あなたは実際に何をしたいのか説明できますか?その後、もっと助けることができるかもしれません; – fraxel
私は赤色の最初のピクセルを意味します。私は長期的に何をしたいのか分かりません、ちょうどループを使用することは避けられません。 –