如何在Android上立即强制Qt GUI小部件更新?

时间:2017-06-29 16:43:03

标签: android qt uvc

我正在开发一个使用opencv对来自android usb camera的视频流进行图像处理的项目。因为我不太擅长java,所以我决定在android上使用Qt和opencv-android-sdk。 我使用libuvc示例在Android上获取我的视频流:https://github.com/ktossell/libuvc/blob/master/src/example.c uvc_start_streaming(mDeviceHandle, &ctrl, cb, user_ptr, 0); 我的uvc代码:

uvc_start_streaming(mDeviceHandle, &ctrl, cb, user_ptr, 0);
sleep(10);/* stream for 10 seconds */
uvc_stop_streaming(mDeviceHandle);

cb是uvc_start_streaming的回调函数,也是我放置opencv图像处理代码的地方,我也尝试在此函数中更新Qt GUI小部件。 这是我的cb功能:

void cb(uvc_frame_t *frame, void *ptr) {   
    Mat img(480,640,CV_8UC3,frame->data,1280);
    //some image process here
    w->updatePreview(img);
}

w是一个qt Mainwindow和我在mainwinow中的updatePreview函数:

void MainWindow::updatePreview(Mat imgPreview)
{
    mpImageLabel->setPixmap(QPixmap::fromImage(Mat2QImage(imgPreview)));
}

我的例外是在mpImageLabel中看到来自我的usb相机的实时视频,但实际上只有mpImageLabel显示了uvc流的最后一帧,其他时候mpImageLabel都是空白的。我猜gui更新功能是挂起的uvc流媒体时间。 我搜索了一会儿,尝试了qApp-> processEvent方法,但根本没有工作。对此有什么想法?

0 个答案:

没有答案