我一直在使用用于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)?
非常感谢任何提示...我已经坚持了一段时间了......我真的不确定这个过程的哪个部分会引发错误.任何提示或建议都将非常受欢迎......
我正试图以不同的方式重新安排对象列表.在这里,我将使用整数,但可以在此列表中的任何内容.
以下示例代码按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) 我正在尝试使用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发送的原始音频的语音有任何指导?