2013-05-01 37 views
0

我将根据从OpenCV读取的坐标来跟踪对象。问题是:为了使我的伺服器以正确的方式旋转120度,我需要再发送3300到伺服器。 (1度,我需要发送27.5更多伺服)。使用OpenCV进行伺服控制

现在我需要找到一个关系,我从OpenCV读取的坐标和我需要发送给伺服的值。但是我无法理解OpenCV的坐标。例如,我不改变物体的高度,我只减小物体和相机之间的距离,在这种情况下,只有z值应该减小,但似乎x值也会显着变化。这是什么原因?

如果我的代码存在问题(也许x不会改变,但我读错了),请给我提供关于OpenCV坐标的信息以及如何解释它?正如我在开始时所说的,我需要找到一个关系,例如我的伺服器旋转了多少度,对应于我从OpenCV中读取的球X坐标的多少变化?

问候

EDIT1的@FvD:

int i; 
    for (i = 0; i < circles->total; i++) 
    { 

     float *p = (float*)cvGetSeqElem(circles, i); 
     printf("Ball! x=%f y=%f r=%f\n\r",p[0],p[1],p[2]); 
     CvPoint center = cvPoint(cvRound(p[0]),cvRound(p[1])); 
     CvScalar val = cvGet2D(finalthreshold, center.y, center.x); 

     if (val.val[0] < 1) continue; 
     cvCircle(frame, center, 3,    CV_RGB(0,255,0), -1, CV_AA, 0); 
     cvCircle(frame, center, cvRound(p[2]), CV_RGB(255,0,0), 3, CV_AA, 0); 
     cvCircle(finalthreshold, center, 3,    CV_RGB(0,255,0), -1, CV_AA, 0); 
     cvCircle(finalthreshold, center, cvRound(p[2]), CV_RGB(255,0,0), 3, CV_AA, 0); 
    } 
+0

你在说什么样的坐标?你在使用立体相机设置吗?坐标是指什么以及它们是如何计算的?你是指球的中心的图像坐标和它的差距? – FvD 2013-05-01 05:53:31

+0

@FvD我正在使用连接到伺服器的摄像头。我的对象是圆形的,这是我用来获得它的中心坐标的地方:'cvGetSeqElem(circles,i);'现在根据这些坐标,如果例如物体取代了x的数量,我需要找到要转动我的伺服器的次数。 – Xentius 2013-05-01 08:37:02

+0

这不是很有用,几乎就像说“x和y是整数” - 该命令仅从序列“圈子”中检索一个对象,它没有说明您使用的坐标的计算方式。什么是实际的设置,你在说什么样的坐标?他们是现实世界还是图像坐标? – FvD 2013-05-01 09:40:28

回答

0

一般情况下,有没有OpenCV的坐标,但你会经常使用的图像矩阵的行和列的图像坐标。

如果您已经校准了相机,则可以将这些图像坐标转换为真实坐标。在一般情况下,除非您有第二台摄像机(立体视觉)或有关场景的补充信息,例如,您无法使用单个摄像机图像精确定位物体在空间中的位置。如果您正在探测地面上的物体,并且知道摄像机相对于地平面的方向和位置。在这种情况下,将球移向相机会导致意外的移动,因为它假定它躺在地上是违反了。

您提供的代码片段中的坐标是图像坐标。第三个“坐标”是摄像头图像中检测到的圆形斑点的半径,前两个是图像中圆形中心的列和行。

我不确定你在测试中如何移动球,但如果球的中心在图像中保持静止,并且仍然有不同的x坐标,则应该查看所使用的检测算法。

相关问题