2017-10-13 10 views
1

私は、ぼやけたタイムアウトを作成するために、ビデオの30フレームごとに平均化しようとしています。私はビデオの読み込みとビデオの書き込みができましたが、何かが間違っています。なぜなら、私は青いチャンネルしか見ていないからです! (または青に書き込まれている1つのチャンネル)。OpenCVフレームブレンディングの結果は青色になります

アイデア?これを行うより良いやり方は?私はOpenCVが初めてです。コードはKotlinにありますが、これがJavaやPythonなどであれば同じ問題であるはずです。私の推測では、それらを組み合わせる前にブレンドされたと一致するようにImgproc.accumulate(image,blended)試して画像変換して、異なるタイプを使用することになり

val videoCapture = VideoCapture(parsedArgs.inputFile) 
val frameSize = Size(
     videoCapture.get(Videoio.CV_CAP_PROP_FRAME_WIDTH), 
     videoCapture.get(Videoio.CV_CAP_PROP_FRAME_HEIGHT)) 
val fps = videoCapture.get(Videoio.CAP_PROP_FPS) 
val videoWriter = VideoWriter(parsedArgs.outputFile, VideoWriter.fourcc('M', 'J', 'P', 'G'), fps, frameSize) 
val image = Mat(frameSize,CV_8UC3) 
val blended = Mat(frameSize,CV_64FC3) 
println("Size: $frameSize fps:$fps over $frameCount frames") 

try { 
    while (videoCapture.read(image)) { 
     val frameNumber = videoCapture.get(Videoio.CAP_PROP_POS_FRAMES).toInt() 
     Core.flip(image, image, -1) // I shot the video upside down 
     Imgproc.accumulate(image,blended) 
     if(frameNumber>0 && frameNumber%parsedArgs.windowSize==0) { 
      Core.multiply(blended, Scalar(1.0/parsedArgs.windowSize), blended) 
      blended.convertTo(image, CV_8UC3); 
      videoWriter.write(image) 
      blended.setTo(Scalar(0.0,0.0,0.0)) 
      println(frameNumber.toDouble()/frameCount) 
     } 
    } 
} finally { 
    videoCapture.release() 
    videoWriter.release() 
} 

答えて

1

それは1つのフロートに全体の8ビット* 3ピクセルデータを書いていた場合はOpenCVの画像の最初のフィールドが青である(それはBGRの順番を使用しています)

+0

で私の最初の二重によるチャネル、および残りを乗じました答えは今、私はそれがそれでなければ戻ってきます。 :) ありがとうございました! –

+0

あなたは私を正しい道につけてください、下を見てください。 –

2

マーティンベケットは(ありがとう!)正しい答えに私を導きました。私はスカラール(倍精度浮動小数点数)を乗算していましたが、私は平方ダブルで乗算していなかったので、私のヒントであったはずです。

それは 各チャンネルの値で、スカラを期待ので、それは喜んで私が受け入れていますので、多くの意味があります0

Imgproc.accumulate(image, blended64) 
    if (frameNumber > 0 && frameNumber % parsedArgs.windowSize == 0) { 
    val blendDivisor = 1.0/parsedArgs.windowSize 
    Core.multiply(blended64, Scalar(blendDivisor, blendDivisor, blendDivisor), blended64) 
関連する問題