gpt4 book ai didi

opencv - 如何选择全帧(未压缩)作为 VideoWriter 的编解码器

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:21 26 4
gpt4 key购买 nike

我想将来自设备的未压缩帧存储为视频,但我需要知道如何选择“全帧(未压缩)”作为 VideoWriter(在 emgu aka openCV 中)的编解码器。

当我像这样传递 -1 时,我可以从下拉菜单中选择它

VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", -1 , 15, videoSize, true);

但我想自动选择全帧(未压缩)编解码器。例如,我知道我可以通过

选择 Lagarith 无损视频编解码器
VideoWriter myVideoWriter = new VideoWriter ("myVieoColor.avi", Emgu.CV.VideoWriter.Fourcc('L','A','G','S') , 15, videoSize, true);

但我不知道我需要使用哪个 fourcc。

也许有人可以帮帮我

最佳答案

如果我们在编解码器选择对话框打开时进入调试器,我们可以看到它是this call 的结果。到 AVISaveOptions(...)。因此,找出您选择的内容的一种方法是在 line 799 上设置断点。并检查 fourcc 的内容。

不过,还有更简单的方法:

  1. 创建一个只有 1 个黑框的虚拟视频 foo.avi,使用 GUI 选择编解码器。
  2. 使用 cv::VideoCapture 打开 foo.avi
  3. cv::VideoCapture 实例中获取 CAP_PROP_FOURCC
  4. 解码并打印。
  5. [可选] 创建一个只有 1 个黑框的虚拟视频 bar.avi,并使用您在第 3 步中确定的 FOURCC 代码。比较 foo.avi 和 < strong>bar.avi 以验证它们是否相同。

抱歉,我不使用 C#/EmguCV,所以我无法为您提供确切的示例,但以下内容应该很容易移植。

C++ 示例

#include <opencv2/opencv.hpp>
#include <iostream>

int main()
{
{
cv::VideoWriter outputVideo;
outputVideo.open("foo.avi", -1, 25.0, cv::Size(640, 480), true);

cv::Mat frame(480, 640, CV_8UC3);
outputVideo.write(frame);
}

cv::VideoCapture inputVideo("foo.avi");
int fourcc = static_cast<int>(inputVideo.get(CV_CAP_PROP_FOURCC));

char FOURCC_STR[] = {
(char)(fourcc & 0XFF)
, (char)((fourcc & 0XFF00) >> 8)
, (char)((fourcc & 0XFF0000) >> 16)
, (char)((fourcc & 0XFF000000) >> 24)
, 0
};
std::cout << "FOURCC is '" << FOURCC_STR << "'\n";

return 0;
}

控制台输出:

FOURCC is 'DIB '

Python 示例

import cv2
import numpy as np
import struct

outputVideo = cv2.VideoWriter()
outputVideo.open("foo.avi", -1, 25, (640,480), True)

frame = np.zeros((480,640,3), dtype=np.uint8)
outputVideo.write(frame)
outputVideo.release()

inputVideo = cv2.VideoCapture("foo.avi")
fourcc = int(inputVideo.get(cv2.cv.CV_CAP_PROP_FOURCC))

print "FOURCC is '%s'" % struct.pack("<I", fourcc)

控制台输出:

FOURCC is 'DIB '

关于opencv - 如何选择全帧(未压缩)作为 VideoWriter 的编解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com