0

Pythonでjpeg画像からビデオを作成しようとしています。

これは私が持っているコードです。

    codec = highgui.CV_FOURCC('F', 'L', 'V', '1')
    fps = 25
    colored = 1
    size = (float(width), float(height))
    video_writer = highgui.cvCreateVideoWriter(
                'out.mpg', codec, fps, cv.cvSize(1440, 553), True)


    pictures = os.listdir(folder)
    for picture in pictures:
        picture = '%s/%s' % (folder, picture)
        highgui.cvWriteFrame(self.video_writer, picture)

高さ、幅、およびフォルダーが別の場所で既に定義されています。コードを実行すると、次のエラーが表示されます。

Output #0, mpeg, to 'out.mpg':
    Stream #0.0: Video: flv, yuv420p, 1440x553, q=2-31, 50964 kb/s, 90k tbn, 25 tbc
[mpeg @ 0x29425c0] VBV buffer size not set, muxing may fail
Traceback (most recent call last):
  File "./ips.py", line 109, in <module>
    main()
  File "./ips.py", line 62, in main
    video.build(configs['maps']['folder'])
  File "/home/martin/Formspring/maraca-locator-94947aa/encoder.py", line 34, in build
    highgui.cvWriteFrame(self.video_writer, picture)
TypeError: %%typemap(in) IplImage * : could not convert to CvMat

何が間違っているのかわかりません。何が原因なのか分かりませんか? フレームを構築するための好ましい方法はありますか?

4

1 に答える 1

1

cvWriteFrame()有効なが必要ですIplImage*が、持っていないようです。

次のコードを検討してください。

pictures = os.listdir(folder)
    for picture in pictures:
        picture = '%s/%s' % (folder, picture)
        highgui.cvWriteFrame(self.video_writer, picture)

listdir()で指定されたディレクトリ内のエントリの名前を含むリストを返しますfolder。その後、pictureこのリストで反復することを宣言するため、1つのエントリのみが格納されます。これはあなたが混乱しているところです:この時点でpictureは、単なる文字列です。

呼び出す前にcvWriteFrame()、ディスクからイメージデータをロードし、正常にロードされたかどうかを確認する必要があります。

pictures = os.listdir(folder)
    for picture in pictures:
        picture = '%s/%s' % (folder, picture)
        img = cv.LoadImage(picture)
        if not img:
            print "!!! Could not load image " + picture 
            break

        highgui.cvWriteFrame(self.video_writer, img)
于 2012-04-17T13:05:05.507 に答える