gpt4 book ai didi

OpenCV 帧混合只会产生蓝色

转载 作者:太空宇宙 更新时间:2023-11-03 22:09:13 26 4
gpt4 key购买 nike

我试图对视频的每 30 帧进行平均,以创建模糊的游戏中时光倒流。我可以正常阅读视频和编写视频,但出了点问题,因为我只看到蓝色 channel ! (或正在写入蓝色的一个 channel )。

有什么想法吗?或者更好的方法来做到这一点?我是 OpenCV 的新手。代码在 Kotlin 中,但我认为如果这是 Java 或 python 或其他任何东西,它应该是同一个问题。

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()
}

最佳答案

Martin Beckett 让我找到了正确的答案(谢谢!)。我乘以一个 Scalar(double),这应该是我的提示,因为我没有乘以 plain-double。

它需要一个标量,每个 channel 都有一个值,所以它很乐意将我的第一个 channel 乘以双倍,其余 channel 乘以 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)

关于OpenCV 帧混合只会产生蓝色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46721569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com