我正在开发一个视频处理项目,该项目涉及某种加密,使用来自相机的给定帧的简单XOR操作和关键图像,最后存储视频文件。 对于解密阶段,使用相同图像的XOR操作将获得原始帧。但问题是,当我解密框架看起来非常嘈杂,并发现它是因为我在存储时使用的有损图像压缩。 opencv还有其他任何无损图像压缩文件吗?
答案 0 :(得分:2)
如果您正在使用Windows,则可以使用CV_FOURCC_PROMPT
作为VideoWriter
构造函数的第二个参数 - 它将允许您从列表中选择编解码器并设置各种选项。只是为了测试,您可以使用uncompressed avi (aka full frames [not compressed])
。它会生成大量文件,但应该可以正常工作。
否则,只需检查列表http://opencv.willowgarage.com/wiki/documentation/cpp/highgui/VideoWriter
中的所有可能性请注意HighGui is meant as a simple tool for experimentation.
(http://opencv.willowgarage.com/wiki/VideoCodecs),因此可能无法提供您要查找的功能。如果是这样,你将不得不使用其他一些库,并为每个由opencv处理的帧提供。
答案 1 :(得分:1)
根据OpenCV的old page:
有几种无损视频压缩器可供选择。但是,并非所有平台同时支持单个。寻找HuffYUV,CorePNG,Motion PNG或Motion JPEG2000。
最近OpenCV docs提及了几个替代方案,例如 JPG2000 和 LAGS ( Lagarith Lossless Codec )。
前一段时间someone posted a message解释了他如何使用OpenCV和FFmpeg渲染无损压缩视频。
答案 2 :(得分:1)
官方文件说 http://docs.opencv.org/trunk/dd/d9e/classcv_1_1VideoWriter.html#ad59c61d8881ba2b2da22cff5487465b5
大多数编解码器都是有损的。如果你想要无损视频文件,你需要使用 无损编解码器(例如FFMPEG FFV1,Huffman HFYU,Lagarith LAGS, 等......)
如果启用了FFMPEG,则使用codec = 0; FPS = 0;你可以创建一个 未压缩(原始)视频文件。
答案 3 :(得分:0)
在Debian Linux上(使用ffmpeg):
int width = 640;
int height = 480;
bool isColor = true;
string outFName = "out.avi";
Size frameSize = Size(width, height);
int fourcc = VideoWriter::fourcc('p', 'n', 'g', ' ');
outputVideo.open(outFName, fourcc, cap.get(CAP_PROP_FPS), frameSize, isColor));