OpenCv: как установить маркер по определенной координате в видеопотоке open cv - PullRequest
0 голосов
/ 11 ноября 2011

Я работаю с NITE / OPENNI и opencv в xcode 4 для работы с kinect. Я могу получить координаты головы, например, это делается:

В основном, вне хитрости (правда):

 IplImage *rgbimg = cvCreateImageHeader(cvSize(640,480), 8, 3);

Тогда в коварстве (правда)

XnSkeletonJointPosition Head;
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition( aUsers[i], XN_SKEL_HEAD, Head); 
printf("%d: (%f,%f,%f) [%f]\n", aUsers[i], Head.position.X, Head.position.Y, Head.position.Z, Head.fConfidence); }

У меня также есть видеопоток:

    // Take current image
    const XnRGB24Pixel* pImage = Xn_image.GetRGB24ImageMap();

    //process image data
    XnRGB24Pixel* ucpImage = const_cast<XnRGB24Pixel*> (pImage);
    cvSetData(rgbimg,ucpImage, 640*3);
    cvCvtColor(rgbimg,rgbimg,CV_RGB2BGR);
    cvShowImage("RGB",rgbimg);

Все это делается в основном за некоторое время (правда).

Теперь мой вопрос: как я могу установить какой-нибудь маркер (например, *, перекрестие, X) в положении координат руки в видеопотоке?

EDIT

я пытался:

XnRGB24Pixel* ucpImage = const_cast<XnRGB24Pixel*> (pImage);
cvSetData(rgbimg,ucpImage, 640*3);
cvCvtColor(rgbimg,rgbimg,CV_RGB2BGR);
cvCircle(rgbimg, cvPoint(Head.position.X,Head.position.Y), 20, cvScalar(0,255,0), 1);
cvShowImage("RGB",rgbimg);

и я получаю:

enter image description here

как видите, круг почему-то остается в верхнем левом углу. Есть идеи как это изменить?

1 Ответ

0 голосов
/ 11 ноября 2011

Попробуйте функции отображения в OpenCV:

line (), circle (), drawPoly () и примените их к каждому кадру в вашем видео

...