小编tim*_*ror的帖子

Emgu(OpenCV for C#) - 使用cvStereoRectify构建视差图

我一直在使用用于OpenCV的伟大的Emgu C#包装器来收集家用立体声装备的图像.两个网络摄像头用螺栓固定在一块35厘米的木头上,希望能让我在10-20米范围内制作深度图.我将它们设置为尽可能平行(三角测试大约89.3度).

我正在尝试从这些中制作视差图,尽管该过程作为代码起作用,但结果非常随机.我的意思是每当我尝试运行立体声整流时,我会得到非常不同的结果,而且图像经常如此严重扭曲,屏幕上几乎看不到任何东西.

据我了解,这样做的方法如下:


1)打印出棋盘图案(例如6个8个内角) - 粘在平坦的东西上.

2)从相机1拍摄一组约10张照片,在全景但不同的位置拿着棋盘.

3)使用CameraCalibration.FindChessboardCorners查找内角(6乘8)

4)使用img.FindCornerSubPix()将这些角位置细化为子像素级别

5)使用CameraCalibration.CalibrateCamera()计算内在的摄像头细节,并将其保存为XML文件

6)对相机2重复上述步骤.

7)现在您有内部摄像机失真信息,您可以拍摄立体照片对,并使用CameraCalibration.StereoCalibrate()和先前计算的内在数据来计算外部信息(摄像机1和2之间的偏移和旋转).

8)使用CvInvoke.cvStereoRectify()和CvInvoke.cvInitUndistortRectifyMap()然后使用CvInvoke.cvRemap()来构建一个输出图像,该图像应该在Y中排成一行,这样您就可以运行其中一个立体对应测试.

我发现你需要使用Emgu 2.1 ver 806来使cvStereoRectify工作而不会出现访问冲突错误.


我想我的问题是:

A)我的流程是否正确?我一直在做相机固有校准作为一个单独的过程,因为相机相距35厘米,因为它们在办公室中并且很多时候移动它而不容易获得棋盘...因为它很快离开了其中一个相机视图.我认为由于值是固有的,因此它们与相机有关,因此应转移到立体声程序OK.它是否正确?

看起来内部值在cvStereoRectify过程中会发生变化,并且变得非常不同.

例如.cvStereoRectify后,第一阶段的失真值= 0.22,-1.2,0.01,-0.01,2.6,值变为= 10,-489,-0.03,-0.09,13208

我不是专家,但第一套看起来更像是我从其他人的评论中看到的,第二套似乎很明显!

B)有没有办法阻止在cvStereoRectify期间更新内在+失真值?

C)这似乎是正确的内在价值(937,0,290,0,932,249,0,0,1)?

非常感谢任何提示...我已经坚持了一段时间了......我真的不确定这个过程的哪个部分会引发错误.任何提示或建议都将非常受欢迎......

c# disparity-mapping emgucv

7
推荐指数
1
解决办法
4725
查看次数

不同的排序令 - 分而治之?

我正试图以不同的方式重新安排对象列表.在这里,我将使用整数,但可以在此列表中的任何内容.

以下示例代码按1,2,3,4,5,6,7,8以下顺序排序: 1,8,2,7,3,6,4,5

首先.持续.第二.倒数第二等它可能有点笨重,但它的工作原理.

现在我正在尝试做的是以另一个顺序输出列表,以便它一分为二.我认为这可能被称为分而治之,但在尝试/查看一些递归排序代码等之后,我不太清楚如何在这里实现它.

我希望得到这样的数字.

1,8,4,2,6,3,5,7
Run Code Online (Sandbox Code Playgroud)

首先,最后,中途,上半场中途,下半场中途等

所以换句话说,我要做的就是将数字组合分成两半......然后每一半将这些数字分成两半.等等:

1 2 3 4 5 6 7 8
1                      (first item)
              8        (last item)
      4                (mid item)
  2                     (mid of first half) 
          6              (mid of second half)
    3                    (mid of 1st chunk)
        5                (mid of 2nd chunk)
           7             (mid of 3rd chunk)
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我如何做到这一点,通过这个简单的例子,这真的很棒.

 static void Main(string[] args)
    {

        List<int> numberlist = new List<int>();

        numberlist.Add(1);
        numberlist.Add(2);
        numberlist.Add(3);
        numberlist.Add(4);
        numberlist.Add(5);
        numberlist.Add(6);
        numberlist.Add(7);
        numberlist.Add(8);

        int rev = numberlist.Count-1;
        int fwd = 0; …
Run Code Online (Sandbox Code Playgroud)

c# sorting list

6
推荐指数
1
解决办法
747
查看次数

使用来自Skype呼叫的MemoryStream,使用SAPI 5.4或MS Speech SDK v11在C#中进行语音识别

我正在尝试使用SAPI 5.4(也是MS Speech Platform SDK v11)对来自Skype呼叫的音频执行连续语音识别.

我可以使用SKYPE4COMLib来获取来自Skype的音频,并通过发出ALTER CALL指令将其推送到TCP端口.您可以将Skype音频定向到文件或TCP套接字.文件工作正常,但我想让它现场运行识别,所以使用TCP套接字.

然后,我构建了一个TCP侦听器来收集传入的数据(音频原始格式),并将字节数组作为MemoryStream传递给SAPI.我已经设置了SAPI,以期望16bit,16khz,mono,PCM格式的原始音频.然而,识别事件永远不会发生?!

我已经尝试将原始音频保存到磁盘,然后将其读入SAPI并且工作正常......因此数据本身很好,Skype正在发送音频.然而,这不能让我做我需要的持续认可.

使用WAV文件或从磁盘或麦克风加载的原始文件,SAPI识别代码可以正常工作.我无法从MemoryStream中获取它.

我发现这篇类似的文章,似乎没有任何建议对我有用,讨论似乎已经变得安静了.

将输入流式传输到System.Speech.Recognition.SpeechRecognitionEngine

有没有人对如何成功让SAPI持续识别C#中作为MemoryStream发送的原始音频的语音有任何指导?

c# memorystream skype sapi

5
推荐指数
1
解决办法
1834
查看次数

标签 统计

c# ×3

disparity-mapping ×1

emgucv ×1

list ×1

memorystream ×1

sapi ×1

skype ×1

sorting ×1