2011-03-03 4 views
0

J'essaie de faire une application en utilisant Kinect (OpenNI), le traitement de l'image (OpenCV) avec une interface graphique.OpenNI + OpenCV + Qt

J'ai testé de OpenNI + et OpenCV OpenCV + Qt

Normalement, lorsque nous utilisons OpenCV + Qt, nous pouvons faire un QWidget pour afficher le contenu de la caméra (VideoCapture) .. capturer une image et mettre à jour cette interrogation pour nouvelles images à l'appareil. Avec OpenNI et OpenCV, je vois des exemples utilisant un cycle pour extraire des données des capteurs Kinect (image, profondeur), mais je ne sais pas comment rendre ce routage plus simple. Je veux dire, similaire à l'interrogation cadre OpenCV.

L'idée est intégrée dans un QWidget les images capturées à partir de Kinect. Le QWidget aura (pour l'instant) 2 boutons "Démarrer Kinect" et "Quitter" ..et en dessous de la section Peinture pour montrer les données capturées.

Avez-vous des questions?

Répondre

0

Vous pouvez essayer la classe QTimer pour interroger la kinect à des intervalles de temps fixes. Dans ma demande, j'utilise le code ci-dessous.

void UpperBodyGestures::refreshUsingTimer() 
{ 
    QTimer *timer = new QTimer(this); 
    connect(timer, SIGNAL(timeout()), this, SLOT(MainEventFunction())); 
    timer->start(30); 
} 

void UpperBodyGestures::on_pushButton_Kinect_clicked() 
{ 
    InitKinect(); 
    ui.pushButton_Kinect->setEnabled(false); 
} 


// modify the main function to call refreshUsingTimer function 

    UpperBodyGestures w; 
    w.show(); 
    w.refreshUsingTimer(); 
    return a.exec(); 

Ensuite, pour interroger le cadre, vous pouvez utiliser le widget d'étiquette. Je poste un exemple de code ci-dessous:

// Query the depth data from Openni 
const XnDepthPixel* pDepth = depthMD.Data(); 
// Convert it to opencv for manipulation etc 
cv::Mat DepthBuf(480,640,CV_16UC1,(unsigned char*)g_Depth); 
// Normalize Depth image to 0-255 range (cant remember max range number so assuming it as 10k) 
DepthBuf = DepthBuf/10000 *255; 
DepthBuf.convertTo(DepthBuf,CV_8UC1); 
// Convert opencv image to a Qimage object 
QImage qimage((const unsigned char*)DepthBuf.data, DepthBuf.size().width, DepthBuf.size().height, DepthBuf.step, QImage::Format_RGB888);   
// Display the Qimage in the defined mylabel object 
ui.myLabel->setPixmap(pixmap.fromImage(qimage,0).scaled(QSize(300,300), Qt::KeepAspectRatio, Qt::FastTransformation));