0

OpenCVのビデオ作成機能の使用に小さな問題があります。

同じ画像の場合、必要な出力サイズに応じて奇妙な出力が得られます。

これが私が得ることができる結果の例です。

http://www.youtube.com/watch?v=1wm8VjyfdyA&feature=youtu.be

私はいくつかの異なる画像のセットを、異なるコンピューターで試しました。Windowsでは正常に動作しているようで、Ubuntuパッケージ(現在の2.3.1-7)で出荷されるOpencvに問題があります。

この問題は私のウィンドウでは再現できないので、2.4で修正されたか、Linuxに固有の問題だったと思います。

これが問題を浮き彫りにする(python)テストコードです:

import os
import cv

in_dir = "../data/inputs/sample-test"
out = "output.avi"


# loading images, create Guys and store it into guys
frameSize = (652, 498)
#frameSize = (453, 325)
fourcc = cv.CV_FOURCC('F', 'M', 'P', '4')
my_video = cv.CreateVideoWriter(out, 
                              fourcc, 
                              15, 
                              frameSize,
                              1)

for root, _, files in os.walk(in_dir):
    for a_file in files:
        guy_source = os.path.join(in_dir, a_file)
        print guy_source
        image = cv.LoadImage(guy_source)

        small_im = cv.CreateImage(frameSize, 
                                  image.depth ,
                                  image.nChannels)        
        cv.Resize(image, small_im, cv.CV_INTER_LINEAR)
        cv.WriteFrame(my_video, small_im)

print "Finished !"

私の懸念は、出力サイズによっては、ビデオが正常であるということです(たとえば、652、498で問題ありません)。動作は、私が使用するコーデックに関係なく同じです。

修正されていない場合は、このバグの理由についてさらに情報が必要です。Ubuntu向けに出荷したいので、パッケージシステムを使用して、しばらくの間2.3を維持したほうがよいでしょう。

ですから、教育を受けたサイズを選ぶことで、どうすれば問題を賢く解決できるかを知りたいと思います。

どんな情報でも大歓迎です

どうも !

4

1 に答える 1

2

これは、ビデオコーディングでよくある問題です。ご覧のとおり、画像は各行の左側に少しずつシフトされています。

ご存知かもしれませんが、画像は文字の長い行として保存されます:BGRBGRBGR ....また、幅と高さ、および2つの連続する行間のバイト単位の距離によっても定義されます。単純な仮定は、ステップが3(channels)*widthであるということです。ただし、さらに、メモリアライメントの理由から、ステップ値を4(通常)または16の倍数にするために、画像行に余分なビットが埋め込まれます。その理由は、ハードウェアコーデックアクセラレーションがアライメントされたデータ(32ビットアーキテクチャ)で機能するためです。一度に32ビットを読み取り、SIMD処理の場合、整列されたデータはより高速にロードされます。

したがって、画像は次のように表されます。

BGRBGR00
BGRBGR00

これで、コーデックがこのパディングを認識しない場合、画像の幅を2として読み取り、データを次のように解釈します。

BGRBGR
00BGRB
0000BG // note the extra padding

この問題が発生しないようにするには、ステップ値(channels * width)が4の倍になるように画像の幅を選択する必要があります。すべての標準解像度にはこのプロパティがあり、これが選択された理由の1つです。

640x480
1024x768
etc
于 2012-07-11T20:24:42.963 に答える