调用opencv的函数cvCreateVideoWriter生成的视频太大(几G),怎么生成小的视频?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用opencv的函数cvCreateVideoWriter生成的视频太大(几G),怎么生成小的视频?相关的知识,希望对你有一定的参考价值。

1、加个h.263的压缩类把图像压缩了再储存。
2、H.263是由ITU-T制定的视频会议用的低码率视频编码标准,属于视频编解码器。H.263最初设计为基于H.324的系统进行传输(即基于公共交换电话网和其它基于电路交换的网络进行视频会议和视频电话)。后来发现H.263也可以成功的应用与H.323(基于RTP/IP网络的视频会议系统),H.320(基于综合业务数字网的视频会议系统),RTSP(流式媒体传输系统)和SIP(基于因特网的视频会议)。
3、视频(Video)泛指将一系列静态影像以电信号的方式加以捕捉、纪录、处理、储存、传送与重现的各种技术。连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做视频。视频技术最早是为了电视系统而发展,但现在已经发展为各种不同的格式以利消费者将视频记录下来。网络技术的发达也促使视频的纪录片段以串流媒体的形式存在于因特网之上并可被电脑接收与播放。视频与电影属于不同的技术,后者是利用照相术将动态的影像捕捉为一系列的静态照片。
参考技术A OpenCV那个是没有压缩的,你要不加个h.263的压缩类把图像压缩了再储存。

c++调用opencv相关函数并打包成dll,c#不能调用

【中文标题】c++调用opencv相关函数并打包成dll,c#不能调用【英文标题】:c++ calls opencv related function and is packaged into dll, c# can not call it 【发布时间】:2019-11-06 14:05:52 【问题描述】:

c++调用opencv相关函数后调用dll,c#不能调用。但是如果我不使用我的dll中的opencv,它可以正常工作。就像opencv包中的imread函数一样。

当我打包 dll 时,我使用了 opencv.dll 及其 lib 文件。在C++中,他们的相关环境已经配置好了。不知道c#是否需要配置相关的opencv环境,或者还需要什么其他方法。

[c++ code]-Packaged into test.dll
#include<memory.h>
#include<time.h>
#include<math.h>
#include<vector>
#include"test.h"

#pragma comment(lib,"opencv_world310.lib")

using namespace cv;
using namespace std;

extern "C" __declspec(dllexport) int test();
int test()

    Mat readImage = imread("D:\\pic\\pic1.JPG");
    int rowPic = readImage.rows;
    return rowPic;


[c# code]-Call the test.dll
namespace testOilDetectionCsharp

    public sealed partial class MainPage : Page
    
        [DllImport("test.dll", CharSet = CharSet.Unicode)]
        extern static int test();

        public MainPage()
        
            this.InitializeComponent();
        

        private void Button_Click(object sender, RoutedEventArgs e)
        
            unsafe
            
                int num = test();
                textBox.Text = num.ToString();
            
        

    

就像测试函数一样,我有图片路径,但是在c#中,调用该函数理论上会返回图像中的行数。不是这种情况。 opencv 中的 imread 函数不起作用。 谢谢!

【问题讨论】:

应用程序崩溃了吗?你得到什么异常? 谢谢,这个应用程序没有崩溃,但它总是返回0,opencv中的imread函数不起作用,所以我无法得到这个测试图片的行数和列数。 那么有两种可能性。 Imread 有问题或 c++/c# 接口有问题。要验证,请使用上述代码运行 c++ 控制台应用程序并检查结果。 Imread 是一个非常可靠的功能,我用过很多次。可能是您的图片路径错误或图片已损坏。 这里不需要不安全的块,因为我们没有使用任何指针。如果您使用的是视觉工作室,请在“return rowPic;”上放置一个断点;行并检查 readImage。如果它为空,那是因为文件丢失、权限不正确、格式不支持或无效。也检查一下docs.opencv.org/master/d4/da8/… THANKS,当我使用C++打包DLL时,我使用C++调用DLL,结果是我想要的,但是C#调用的返回值总是0。首先,我将路径字符串作为指针传递到 DLL 中,因此我使用了 unsafe。后来我直接传递了路径,而不是指针。 【参考方案1】:

从外观上看,我认为这是一个 dll not found 异常。我遇到过很多这样的。可能您可以通过运行 EventViewer(它是 Windows 内的实用程序)来解决这个问题。事件查看器将有一个关于丢失 DLL 的条目。可能将所有 opencv dll 复制到执行路径即可解决此问题。

【讨论】:

好的,我现在试试。谢谢。 我试了之后还是不行。函数返回结果还是0。我发现不是缺少其他的DLL,只是opencv中的imread函数不能用了。

以上是关于调用opencv的函数cvCreateVideoWriter生成的视频太大(几G),怎么生成小的视频?的主要内容,如果未能解决你的问题,请参考以下文章

Opencv 函数只能以 C 代码方式调用,但不能以 C++ 方式调用

如何通过C#调用OpenCV函数(自制OpenCV的c++ dll文件)

[转] matlab调用opencv函数的配置

在 C++ 和 OpenCV 中调用其他文件中的函数

多核,使从内部函数调用的函数在第二个核心上运行。直接展示,opencv

opencv动态目标检测,出现明显调用表达式前的括号必须具有(指针)函数类型的问题