【发布时间】:2013-05-04 22:30:26
【问题描述】:
我有一个继承自 cv::VideoCapture 的 Camera 类,其核心方法是将我从直播流中获取的 cv::Mat 转换为 QImage:
QImage Camera::getFrame() {
if(isOpened()) {
cv::Mat image;
(*this) >> image;
cv::cvtColor(image, image, CV_BGR2RGB);
return QImage((uchar*) image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);
}
else return QImage();
}
还有一个封装类CameraDelayedView,它调用这个方法并添加一个延迟:
void CameraDelayedView::timerEvent(QTimerEvent *evt) {
if(cam != NULL) {
buffer.enqueue(cam->getFrame());
if(buffer.size() > delay*fps) {
setPixmap(QPixmap::fromImage(buffer.dequeue()));
}
}
}
我可以看到视频的初始显示延迟了 5 秒,但之后运行流畅。看起来图像仍然以某种方式通过指针链接到实时提要(或者 QQeueue 不是正确的 FIFO,但我对此表示怀疑)......是这样吗?
如果是这样,我可以通过这种方式向正在经历相同事情的其他人提供答案,并且我会对一种有效的复制方式(或更有效的上述代码)感兴趣。如果没有,我不知道发生了什么......
提前致谢。
问候, 神秘先生
【问题讨论】: