将 opengl 缓冲区写入视频的工件

Artifacts on writing opengl buffer to a video

我正在使用 glReadPixels 从 OpenGL 上下文中读取并最终使用 openCV 视频编写器将其写入视频文件。

    screenshot = glReadPixels(0,0,w,h,GL_BGR,GL_UNSIGNED_BYTE)
    cv_image = cv2.cv.CreateImage((w,h), cv2.cv.IPL_DEPTH_8U, 3)
    cv2.cv.SetData(cv_image, screenshot)
    cv2.cv.Flip(cv_image)
    cv2.cv.SaveImage("temp.jpg", cv_image)
    cv2.cv.WriteFrame(video, cv_image)

呈现的视频显示了下图中的伪像。我将所有帧(上面的 cv_image 变量)保存到磁盘,其中 none 有任何瑕疵。似乎 WriteFrame 在这里造成了一些麻烦。 请帮我解决问题。

切换到无损压缩方案,例如 PNG(用于图像)或 Huffyuv(用于视频)。