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

2024-04-09

我想将设备中的未压缩帧存储为视频,但我需要知道如何选择“全帧(未压缩)”作为 VideoWriter(在 emgu 中又名 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。

也许有人可以帮助我


如果我们在编解码器选择对话框打开时进入调试器,我们可以看到它的结果这个电话 https://github.com/opencv/opencv/blob/05b15943d6a42c99e5f921b7dbaa8323f3c042c6/modules/videoio/src/cap_vfw.cpp#L792 to AVISaveOptions(...)。因此,找出您选择的内容的一种方法是在上面设置一个断点line 799 https://github.com/opencv/opencv/blob/05b15943d6a42c99e5f921b7dbaa8323f3c042c6/modules/videoio/src/cap_vfw.cpp#L799并检查内容fourcc.

然而,还有更简单的方法:

  1. 创建虚拟视频foo.avi只有 1 个黑帧,使用 GUI 选择编解码器。
  2. Open foo.avi using cv::VideoCapture.
  3. Get the CAP_PROP_FOURCC来自cv::VideoCapture实例。
  4. 解码并打印它。
  5. [可选] 创建虚拟视频bar.avi仅使用 1 个黑框,并使用您在步骤 3 中确定的 FOURCC 代码。比较foo.avi and 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 '
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何选择全帧(未压缩)作为 VideoWriter 的编解码器 的相关文章

  • Python中使用cv2获取当前视频播放位置

    我正在尝试使用 CV2 和 Python 从播放视频中获取当前播放时间位置 如果可能 以毫秒为单位 目前我正在使用此示例代码来播放视频文件 import cv2 import numpy as np file name 2 mp4 wind
  • Opencv中内存Mat表示

    我知道在内存中opencv将Mat对象表示为一个大数组 因此 如果我有 3 个尺寸为 200x200 的通道垫 那么在内存中它将将该垫存储在尺寸为 3x200x200 的数组中 或者更一般地说 内存中的任何 Mat 都将存储为channel
  • Python OpenCV视频格式在浏览器中播放

    我正在尝试从一系列图像创建视频并将其显示在浏览器中 但由于某些奇怪的原因 无论我使用什么编解码器或文件格式 我都会收到以下错误 找不到格式和 MIME 类型受支持的视频 这是我的代码 ready images import cv2 for
  • 如何使用 python cv2 api 将 xy 点格式化为 unactorPoints?

    我在格式化要传递给 unactorPoints 的 x y 点列表时遇到问题 opencv 2 4 1 该错误消息是 C 特定的 并抱怨点数组不是 CV 32FC2 类型 我不应该能够传入 Nx2 numpy 数组吗 import cv2
  • 使用 cvcreateimage 使用 opencv 创建简单的黑色图像

    来自 OpenCV 新手的非常基本的问题 我只想创建一个图像 每个像素设置为0 黑色的 我在 main 函数中使用了以下代码 IplImage imgScribble cvCreateImage cvSize 320 240 8 3 我得到
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • C# EmguCV 错误“OpenCV: u != 0”

    我不断收到这个OpenCV u 0尝试匹配某些照片时出错 我的方法看起来像这样 ImageFile 类有一些变量 即使我试图匹配一张照片 它也会这样做 堆栈跟踪是 未处理的异常 Emgu CV Util CvException OpenCV
  • 如何使用 OpenCV 从图像中获取调色板 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想提取图像的调色板 类似于此 来自 我需要它来提取特定的颜色 如黄色 绿色和棕色 并显示该颜色覆盖的区域的百分比 另外 我可以添加更
  • OpenCV:使用 StereoCamera 系统对颜色标记进行 3D 姿态估计

    我有一个立体摄像系统并使用两者正确校准它 cv calibrateCamera and cv stereoCalibrate My reprojection error似乎没问题 凸轮0 0 401427 凸轮1 0 388200 立体声
  • 如何使用 SimpleBlobDetector 获取 blob 的额外信息?

    robot sherrick 回答了我这个问题 https stackoverflow com a 13534094 1705967 这是他回答的后续问题 cv SimpleBlobDetectorOpencv 2 4 中的 看起来非常令人
  • 从 2 个摄像头捕获(OpenCV、Python)[重复]

    这个问题在这里已经有答案了 所以我试图从 openCV 中的两个摄像头 python 和 windows 7 进行捕获 我用一台相机拍摄的效果很好 你也会注意到我正在对图像做一些时髦的事情 但这并不重要 这是尝试使用两个的代码 import
  • 在 Android 中使用 OpenCV 查找图像匹配

    我正在尝试构建一个 Android 应用程序 该应用程序可以比较设备相机拍摄的照片 以在一组图像中找到匹配项 我已经在 Android Studio 上配置了 OpenCV 但仅此而已 有人可以通过链接到资源或建议教程来提供帮助吗 Open
  • 使用 OpenCV VideoWriter 将 RTSP 流存储为视频文件

    我正在使用 OpenCV 开发一个 Python 模块 该模块连接到 RTSP 流以对视频执行一些预处理 主要是降低 fps 和分辨率 然后将其存储在文件系统中 但是 即使在尝试了几种编解码器 寻找类似的开发之后 我总是得到一个空的视频 我
  • 警告:发生了非法反射访问操作(java 中的便携式 opencv)

    我想做一个便携的opencv将依赖项添加到 maven 文件的应用程序pom xml 简化的代码是 import org opencv core Mat public class Builder public static void mai
  • 如何确定透视变换后的点在新图像平面中的位置?

    我使用 OpenCV Python Numpy 图像中有三个点 我知道这些点的确切位置 P1 P2 N1 我要将图像转换为另一个视图 例如 我将透视图转换为侧视图 如果这样做 我将无法获得图像平面中这三个点的确切位置 我应该以一种可以获得这
  • Android for OpenCV - 打开跟踪文件时出错,UnsatisfiedLinkError

    我对 Android 开发和 OpenCV 都是新手 我从 Android 下载了 OpenCV 库http sourceforge net projects opencvlibrary files opencv android http
  • GrabCut - bgdModel 和 fgdModel 为空 - 断言错误

    我正在尝试使用 OpenCV2 1 C 中的 GrabCut 算法进行图像分割 这是我的代码 Mat rgbWorkImage imread argv 1 Mat mask mask Scalar 0 Mat bgdModel fgdMod
  • 如何将 OpenCV 的测试框架与 CMake 结合使用?

    好像 OpenCV 有一个测试框架 https github com Itseez opencv tree ef91d7e8830c36785f0b6fdbf2045da48413dd76 modules ts include opencv
  • python openCV 中的人口普查变换

    我开始在一个与立体视觉相关的项目中使用 openCV 和 python 我找到了关于使用 openCV 在 C 中进行人口普查转换的文档页面 link http docs opencv org 3 1 0 d2 d7f namespacec

随机推荐