【发布时间】:2020-03-30 19:34:44
【问题描述】:
我正在处理一个视频处理项目,该项目涉及某种加密,使用来自相机的给定帧与关键图像的简单异或运算,并最终存储视频文件。 对于解密阶段,对相同图像的 XOR 操作将获得原始帧。但问题是,当我解密帧时似乎很嘈杂,发现这是因为我在存储时使用了有损图像压缩格式。 opencv还有其他无损图像压缩格式吗??
【问题讨论】:
-
尝试将图片保存为
tiff。
我正在处理一个视频处理项目,该项目涉及某种加密,使用来自相机的给定帧与关键图像的简单异或运算,并最终存储视频文件。 对于解密阶段,对相同图像的 XOR 操作将获得原始帧。但问题是,当我解密帧时似乎很嘈杂,发现这是因为我在存储时使用了有损图像压缩格式。 opencv还有其他无损图像压缩格式吗??
【问题讨论】:
tiff。
如果您在 Windows 上工作,您可以使用 CV_FOURCC_PROMPT 作为 VideoWriter 构造函数的第二个参数 - 它允许您从列表中选择编解码器并设置各种选项。只是为了测试你可以使用uncompressed avi (aka full frames [not compressed])。它会产生巨大的文件,但应该可以正常工作。
否则只需检查列表中的所有可能性
http://www.fourcc.org/codecs.php
请注意HighGui is meant as a simple tool for experimentation.(http://opencv.willowgarage.com/wiki/VideoCodecs),因此它可能无法提供您正在寻找的功能。如果是这样,您将不得不使用其他一些库并给它由 opencv 处理的每一帧。
【讨论】:
根据OpenCV的old page:
有几种无损视频压缩器可用。但是,所有平台都不能同时支持任何一个。寻找 HuffYUV、CorePNG、Motion PNG 或 Motion JPEG2000。
最近的 OpenCV docs 也提到了几个替代方案,例如 JPG2000 和 LAGS(Lagarith 无损编解码器)。
前段时间someone posted a message 解释了他如何使用 OpenCV 和 FFmpeg 以无损压缩方式渲染视频。
【讨论】:
官方文档说 http://docs.opencv.org/trunk/dd/d9e/classcv_1_1VideoWriter.html#ad59c61d8881ba2b2da22cff5487465b5
大多数编解码器都是有损的。如果你想要无损视频文件,你需要使用 无损编解码器(例如 FFMPEG FFV1、Huffman HFYU、Lagarith LAGS、 等等……)
如果启用了 FFMPEG,则使用 codec=0; fps=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));
【讨论】: