我将根据从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);
}
你在说什么样的坐标?你在使用立体相机设置吗?坐标是指什么以及它们是如何计算的?你是指球的中心的图像坐标和它的差距? – FvD 2013-05-01 05:53:31
@FvD我正在使用连接到伺服器的摄像头。我的对象是圆形的,这是我用来获得它的中心坐标的地方:'cvGetSeqElem(circles,i);'现在根据这些坐标,如果例如物体取代了x的数量,我需要找到要转动我的伺服器的次数。 – Xentius 2013-05-01 08:37:02
这不是很有用,几乎就像说“x和y是整数” - 该命令仅从序列“圈子”中检索一个对象,它没有说明您使用的坐标的计算方式。什么是实际的设置,你在说什么样的坐标?他们是现实世界还是图像坐标? – FvD 2013-05-01 09:40:28