该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我用QT使用openCV实现摄像头采集及抓拍,参照网上一个很简单的实例,现在情况是抓拍功能可以正常实现,但是没法显示摄像头实时视频,非常奇怪!
相关代码:
QTimer *timer;
CvCapture *cam;
IplImage *frame;//这几个是类成员
……
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(readFrame()));
……
void CameraCap::on_CapBtn_clicked()
{
frame = cvQueryFrame(cam);
QImage image = QImage((const uchar*)frame->imageData, frame->width, \
frame->height, QImage::Format_RGB888).rgbSwapped();
ui->pictureLabel->setPixmap(QPixmap::fromImage(image));
}
void CameraCap::readFrame()
{
frame = cvQueryFrame(cam);
QImage image = QImage((const uchar*)frame->imageData, frame->width, \
frame->height, QImage::Format_RGB888).rgbSwapped();
ui->videoLabel->setPixmap(QPixmap::fromImage(image));
}
void CameraCap::on_openBtn_clicked()
{
cam = cvCreateCameraCapture(0);
timer->start(33);
}
当我不使用timer去触发readFrame函数显示实时视频,只使用抓拍时,可以正常抓拍。
也就是说,抓拍函数on_CapBtn_clicked完全可以正常工作(点抓拍按钮多次,抓拍一直没问题),而readFrame这个函数会导致segmentation fault,奇怪,明明这两个函数几乎没有任何区别!
求高人指点。