我正在开发一个使用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方法,但根本没有工作。对此有什么想法?