草庐IT

c++ - 一种无需最大化内存即可实时缓冲高清视频的有效方法

我正在编写一个程序,涉及使用OpenCV实时处理来自网络摄像机的视频。我希望能够捕获(在处理过程中的任何时间)以前的图像(例如,十秒的值(value))并保存到视频文件中。我目前正在使用队列作为缓冲区(以推送“cv::Mat”数据)来执行此操作,但这显然效率不高,因为几秒钟的图像很快就会用完所有电脑内存。我尝试使用“cv::imencode”压缩图像,但使用PNG并没有太大区别,我需要一个使用硬盘驱动器内存且实时操作高效的解决方案。谁能提出一个非常简单有效的解决方案?编辑:只是为了让大家明白我此刻在做什么;这是10秒缓冲区的代码:voidrun(){cv::VideoCaptureca

c++ - 从序列化数据中查找 Protocol Buffer 消息类型

我有一些二进制数据,它是通过序列化一个谷歌ProtocolBuffer类获得的。我如何在运行时找出为其序列化数据的类。例如,假设我有一个类abc。我把这个类abc序列化成二进制数据。有没有什么方法可以验证这个二进制数据是通过序列化classabc,而不是其他一些类获得的?另外,如果我用xyz类的parse方法解析这个abc类的二进制数据,我怎么知道解析是否成功。 最佳答案 protobuf不包含在线路上的任何类型信息(除非您自己在protobuf外部这样做)。因此,您不能严格验证-这实际上是一件好的事情,因为这意味着类型是可互换和兼

c++ - 输出缓冲区不会刷新的情况?

我正在学习iostream对象和刷新缓冲区。我知道何时保证刷新输出缓冲区以及如何显式刷新缓冲区。但是,我从未见过输出缓冲区未刷新的情况。在我看来,即使我不使用诸如endl、flush和ends之类的操纵器,输出缓冲区也会在每个语句的末尾刷新>.那么,有没有输出缓冲区不会(或者至少,可能经常不会)被刷新的简单示例?我觉得我需要看到这样的案例才能真正理解输出缓冲区。 最佳答案 取决于系统。以下面的程序为例:#include#ifdefWIN32#include#definesleep(n)Sleep((n)*1000)#else#inc

c++ - Boost序列化多个对象

我正在尝试构建持久性模块,并且正在考虑序列化/反序列化我需要持久化到文件的类。使用Boost序列化可以将多个对象写入同一个文件吗?我如何读取或遍历文件中的条目?如果良好的性能是一个条件,Googleprotocolbuffers可能更适合我? 最佳答案 如果不能序列化多个对象,序列化库就不会很有用。如果您阅读他们的veryextensivedocumentation,您会找到所有答案。. 关于c++-Boost序列化多个对象,我们在StackOverflow上找到一个类似的问题:

c++ - VST 前瞻和 setInitialDelay()

我想我需要在我的VST中实现一个前瞻系统,但以前从未做过。我知道setInitialDelay(foo)被放置在构造函数中,然后你缓冲音频,但我不确定是否读取了“当前”音频和“先行”...... 最佳答案 所以我已经在我的评论中列出了所有内容,但我应该回答这个问题。我将setInitialDelay()设置为100。然后我填充了一个100样本大小的缓冲区,并在2个点处从中读取。前瞻从音频进入系统的0点开始读取。“实时”音频(用户听到的)总是比前瞻落后100步。这很适合我的要求。只需确保所有数组值都已初始化,否则扬声器会发出一些可怕的

c++ - 将数据序列化到 std::streambuf

我有一个VisualStudio2008C++项目,我在其中尝试将来自多个类的数据序列化为自定义std::streambuf实现。数据类及其序列化:structHeader{/*...*/};inlinestd::ostream&operatorstreambuffer实现提供缓冲的i/o并覆盖underflow和overflow。classMyStreamBuf:publicstd::streambuf{public:MyStreamBuf(){InitBuffers();};private:voidInitBuffers(){recv_buffer_.resize(buff_siz

c++ - Direct3D11(C++) : Updating Texture coordinates in constant buffer?

我正在尝试使用Direct3D制作一个相当基本的2D引擎。我制作了一个LoadImage()函数,它将图像的所有相当静态的行为存储在一个对象中。(着色器、顶点缓冲区、采样器等)我计划在常量缓冲区中使用矩阵定位顶点。但是,我还想有一个DrawImage()函数,它有一个参数来告诉纹理的哪一部分应该被绘制(剪裁),所以我必须更新纹理坐标。由于顶点缓冲区已经预定义,我想知道是否有一种方法可以通过发送到顶点着色器的常量缓冲区来更新纹理坐标?我希望我的问题足够清楚,如果您有任何疑问,请查看下面的代码。boolGameManager::GMLoadImage(Image*pImage,constc

java - 从 C/C++ 在内存中写入一个缓冲区,并在没有 JNI 的情况下在 java 中从中读取

我有一个问题,这是否可能以及如何实现?从使用Java从C/C++创建的内存缓冲区中读取字节?我的想法是使用JNI在C++中启动一个循环,将字节写入缓冲区,只将缓冲区的方向发送给Java,然后Java在另一个循环中从中读取字节。目标是减少JNI函数的调用,因为我注意到它们会降低性能。我想知道我必须在Java中使用哪些类以及在C++中使用哪些函数。非常感谢您 最佳答案 您可以使用ByteBuffer。最简单的方法是使用ByteBuffer.allocateDirect()使用Java分配的地址。如果你必须使用C提供的地址,你可以更改地址

java - Java和C++之间的套接字通信

我正在尝试在Java服务器和C++客户端之间建立连接。但是当我在客户端读取数据时,我总是有相同的奇怪字符(¬í)。我试图改变双方的编码,但没有任何效果。这是我的Java代码:publicclassServeur{publicstaticvoidmain(String[]args)throwsException{finalintPORT=13370;try{ServerSocketservice=newServerSocket(PORT);Socketconnection=service.accept();PrintWriterpw=newPrintWriter(connection.g

c++ - 如何在不调用实现定义的行为的情况下将二进制数据写入文件?

我正在编写这样的程序,将一些字节写入文件。#includeintmain(){charbuffer[4]={0,0,255,255};std::ofstreamf("foo.txt",std::ios_base::binary);f.write(buffer,sizeofbuffer);f.close();return0;}这工作正常,并在我的系统上给出了预期的结果。$g++-std=c++11-pedantic-Wall-Wextrasignedness.cc$./a.out$catfoo.txt$od-tx1foo.txt00000000000ffff0000004等效的C代码是: