私は、ぼやけたタイムアウトを作成するために、ビデオの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()
}
で私の最初の二重によるチャネル、および残りを乗じました答えは今、私はそれがそれでなければ戻ってきます。 :) ありがとうございました! –
あなたは私を正しい道につけてください、下を見てください。 –