OpenNI + OpenCV + Qt - PullRequest
       12

OpenNI + OpenCV + Qt

0 голосов
/ 03 марта 2011

Я пытаюсь создать приложение с использованием Kinect (OpenNI), обрабатывая изображение (OpenCV) с помощью графического интерфейса.

Я тестировал de OpenNI + OpenCV и OpenCV + Qt

Нормальнокогда мы используем OpenCV + Qt, мы можем создать QWidget для отображения содержимого камеры (VideoCapture). Захватить кадр и обновить этот запрос на наличие новых кадров на устройстве.

С OpenNI и OpenCV я вижу примеры, используяцикл для получения данных от датчиков Kinect (изображение, глубина), но я не знаю, как сделать так, чтобы этот маршрут был простым.Я имею в виду, что похоже на запрос кадров OpenCV.

Идея заключается в том, чтобы встроить в QWidget изображения, снятые с Kinect.QWidget будет иметь (на данный момент) 2 кнопки «Запустить Kinect» и «Выйти» ... и под разделом «Рисование», чтобы показать захваченные данные.

Есть какие-нибудь мысли?

1 Ответ

0 голосов
/ 30 декабря 2011

Вы можете попробовать класс QTimer для запроса kinect через фиксированные интервалы времени.В моем приложении я использую код ниже.

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();

Затем, чтобы запросить фрейм, вы можете использовать виджет метки.Я публикую пример кода ниже:

// 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));
...