小编Sva*_*Lop的帖子

多线程实时音频编程 - 阻止或不阻止

在编写音频软件时,互联网上的许多人都说不要使用内存分配或阻塞代码,即没有锁定是至关重要的.由于这些是非确定性的,因此可能导致输出缓冲器下溢并且音频将出现故障.

实时音频Progrmaming

当我编写视频软件时,我通常使用两者,即在堆上分配视频帧并使用锁和条件变量(有界缓冲区)在线程之间传递.我喜欢它提供的功能,因为每个操作都可以使用单独的线程,允许软件最大化每个内核,从而提供最佳性能.

对于音频,我想做类似的事情,在线程之间传递可能100个样本的帧,但是,有两个问题.

  1. 如何在不使用内存分配的情况下生成帧?我想我可以使用已预先分配的帧池,但这看起来很混乱.

  2. 我知道你可以使用无锁队列,并且boost有一个很好的库来做到这一点.这将是在线程之间共享的一种很好的方式,但是不断轮询队列以查看数据是否可用似乎是CPU时间的巨大腰部.

根据我的经验,使用互斥锁实际上并不需要花费太多时间,前提是互斥锁被锁定的部分很短.

实现线程之间传递音频帧的最佳方法是什么,同时将延迟保持在最小,不浪费资源并使用相对较少的非确定性行为?

c++ audio multithreading

8
推荐指数
1
解决办法
2685
查看次数

OpenCV 将仿射变换应用于单个点而不是整个图像

我从 KeypointBasedMotionEstimator 类获得了 OpenCV 中的仿射变换矩阵。

它的形式如下:

[1.0008478, -0.0017408683, -10.667297;
0.0011812132, 1.0009096, -3.3626099;
0, 0, 1]
Run Code Online (Sandbox Code Playgroud)

我现在想将变换应用于向量< Pointf >,以便它会变换每个点,就像它们在图像中一样。

OpenCV 似乎不允许只转换点,函数:

 void cv::warpAffine    (   InputArray      src,
    OutputArray     dst,
    InputArray      M,
    Size    dsize,
    int     flags = INTER_LINEAR,
    int     borderMode = BORDER_CONSTANT,
    const Scalar &      borderValue = Scalar() 
)   
Run Code Online (Sandbox Code Playgroud)

似乎只将图像作为输入和输出。

有没有办法可以对 OpenCV 中的单点应用仿射变换?

c++ opencv

7
推荐指数
2
解决办法
9836
查看次数

是否有用于计算机视觉管道原型的程序?

是否有任何软件可用于不需要编码的计算机视觉管道原型。

我已经尝试过这个http://www.cassandra-vision.com/,但是它并不是很容易使用。

当人们在答案中添加内容时,我想列出不同软件的优缺点列表。

软件

卡桑德拉

优点:

  • 大覆盖opencv
  • 免费试用版

缺点:

  • 难以制作管道

价钱:$ 99

FlexCV

优点:

  • 实时更换管道
  • 屏幕预览
  • 即时的
  • 免费试用版

缺点:

  • 还没出来
  • 不成熟
  • 无法导出功能

价格:未知,但看起来大约是100GBP。

SimuLink(MatLab)

如果您使用过此功能,请添加。

优点:

缺点:

价格:135.00美元(用于matlab)+ 39.00美元

自适应视觉

  • 进阶预览
  • 实时参数更改
  • 免费试用版
  • 自己的图像处理库(自适应视觉库)
  • 支持OpenCV库
  • C ++ / C#代码生成器
  • 编写自己的过滤器,例如在C ++中
  • 您的应用程序的简易GUI创建器

prototyping vision computer-vision matlab-cvst

5
推荐指数
0
解决办法
335
查看次数