0

我正在开发一个项目,使用opencv对来自android usb摄像头的视频流进行一些图像处理。由于我不太擅长java,所以我决定在android上使用带有opencv-android-sdk的Qt。我使用 libuvc 示例在 android 上获取我的视频流:https uvc_start_streaming(mDeviceHandle, &ctrl, cb, user_ptr, 0); ://github.com/ktossell/libuvc/blob/master/src/example.c 我的 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 摄像头的实时视频,但实际上只有最后一帧 uvc 流显示在 mpImageLabel 中,其他时候 mpImageLabel 都是空白的。我猜 gui 更新功能在 uvc 流期间挂断时间。我搜索了一段时间并尝试了 qApp->processEvent 方法,但根本不起作用。对此有什么想法吗?

4

0 回答 0