【问题标题】:OpenCV frame blending only results in blueOpenCV 帧混合只会导致蓝色
【发布时间】:2018-03-25 02:20:10
【问题描述】:

我正在尝试平均每 30 帧视频以创建模糊的延时摄影。我的视频阅读和视频写作工作正常,但出了点问题,因为我只看到蓝色通道! (或正在写入蓝色的一个通道)。

有什么想法吗?或者更好的方法来做到这一点?我是 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()
}

【问题讨论】:

    标签: opencv kotlin opencv3.3


    【解决方案1】:

    Martin Beckett 引导我找到了正确的答案(谢谢!)。我乘以 Scalar(double),这应该是我的提示,因为我没有乘以普通双精度。

    它需要一个标量,每个通道都有一个值,所以它很高兴地将我的第一个通道乘以两倍,其余的乘以 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)
    

    【讨论】:

      【解决方案2】:

      我的猜测是在 Imgproc.accumulate(image,blended) 中使用不同的类型,尝试在组合它们之前将图像转换为匹配混合。

      如果将整个 8bit*3 像素数据写入一个浮点数,则 openCV 图像中的第一个字段为蓝色(它使用 BGR 顺序)

      【讨论】:

      • 这很有意义,我现在接受答案,如果不是,我只会返回。 :) 谢谢!
      猜你喜欢
      • 1970-01-01
      • 2021-08-05
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2020-04-12
      • 2014-02-05
      • 1970-01-01
      相关资源
      最近更新 更多