흐린 시간 경과를 만들기 위해 비디오의 30 프레임마다 평균을 잡으려고합니다. 비디오 읽기 및 비디오 쓰기 작업을 할 수 있지만 뭔가 잘못되었습니다. 파란색 채널 만보고 있기 때문입니다! (또는 파란색으로 쓰여지는 하나의 채널).OpenCV 프레임 블렌딩은 파란색으로 만 나타납니다.
아이디어가 있으십니까? 아니면 더 좋은 방법이 있을까요? 나는 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()
}
에 의해 처음으로 두 배에 의하여 채널, 나머지를 곱했다 지금 당장 대답을 해줘야한다. 그렇지 않다면 나는 돌아올 것이다. :) 고맙습니다! –
당신은 나를 올바른 길로 가게합니다. 아래를보십시오. –