ni max不能连续采集图像_视频模块种的连续采集

点击上方“Qt学视觉”,选择“星标”公众号重磅干货,第一时间送达

共同学习共同进步

    相机的连续采集,简单的来说,就是连续获取相机中获取到的图像数据再显示出来,所以,在这里的基本思路就是,在一个地方触发相机启动,再利用一个定时器来捕捉相机中图像的数据,接下来就是每一次捕捉到的图像显示到界面上来

    所以就有以下代码

    头文件中声明以下两个变量和两个槽函数

    QTimer* m_timerGrabImage;//实时采集的定时器    cv::Mat m_matGrab;//实时采集的图片  private slots:    void updateGrabImage();//实时采集图片    void btnGrabContinu_clicked();//连续采集

源文件中,构造函数指定定时器以及信号与槽的对接

  m_timerGrabImage = new QTimer(this);  connect(m_timerGrabImage, SIGNAL(timeout()), this, SLOT(updateGrabImage()));  connect(ui.btnGrabContinu, SIGNAL(clicked()), this, SLOT(btnGrabContinu_clicked()));    //实时采集void QGuiVideo::btnGrabContinu_clicked(){  StopGrap();  //从摄像头捕获视频    if (m_videoGrab.open(0))  {    m_videoPut.open("videotest.mp4", 0, m_videoGrab.get(CAP_PROP_FPS), Size(m_videoGrab.get(CAP_PROP_FRAME_WIDTH), m_videoGrab.get(CAP_PROP_FRAME_HEIGHT)));    m_matGrab = Mat::zeros(m_videoGrab.get(CAP_PROP_FRAME_HEIGHT), m_videoGrab.get(CAP_PROP_FRAME_WIDTH), CV_8UC3);    QString szText = QString("大小:%1X%2 帧率:%3 格式:%4")      .arg(m_videoGrab.get(CAP_PROP_FRAME_HEIGHT))      .arg(m_videoGrab.get(CAP_PROP_FRAME_WIDTH))      .arg(m_videoGrab.get(CAP_PROP_FPS))      .arg(m_videoGrab.get(CAP_PROP_FORMAT));    ui.labelVideoInfo->clear();    ui.labelVideoInfo->setText(szText);    m_nGrabModel = 0;//正常采图模式    m_timerGrabImage->start(10);  }}//实时更新采集到的图片void QGuiVideo::updateGrabImage(){  if (!m_videoGrab.isOpened())  {    return;  }  if (m_videoGrab.read(m_matGrab))  {    if (m_matGrab.data)    {      Mat grab;      cvtColor(m_matGrab, grab, COLOR_BGR2RGB);//Qt中支持的是RGB图像, OpenCV中支持的是BGR              QImage grabimage = QImage((uchar*)(grab.data), grab.cols, grab.rows, QImage::Format_RGB888);      recvShowPicSignal(grabimage, 0);      }    }  }}//显示图片void QGuiVideo::recvShowPicSignal(QImage image, int nShowIndex){  QPixmap ConvertPixmap = QPixmap::fromImage(image);  //要用QGraphicsView就必须要有QGraphicsScene搭配着用  QGraphicsScene* qgraphicsScene = new QGraphicsScene;  //实例化类ImageWidget的对象m_Image,该类继承自QGraphicsItem,是自己写的类  QImageWidgetItem* pImage = new QImageWidgetItem(&ConvertPixmap);  if (0 == nShowIndex)  {    //获取界面控件Graphics View的宽度和高度    int nwith = ui.graphicsViewVideo->width();    int nheight = ui.graphicsViewVideo->height();    //将界面控件Graphics View的width和height传进类m_Image中    pImage->setQGraphicsViewWH(nwith, nheight);    //将QGraphicsItem类对象放进QGraphicsScene中    qgraphicsScene->addItem(pImage);    //使视窗的大小固定在原始大小,不会随图片的放大而放大(默认状态下图片放大的时候视窗两边会自动出现滚动条,并且视窗内的视野会变大),防止图片放大后重新缩小的时候视窗太大而不方便观察图片    ui.graphicsViewVideo->setSceneRect(QRectF(-(nwith / 2), -(nheight / 2), nwith, nheight));    ui.graphicsViewVideo->setScene(qgraphicsScene);  }  else if (1 == nShowIndex)  {    int nwith = ui.graphicsViewVideoPro->width();    int nheight = ui.graphicsViewVideoPro->height();    pImage->setQGraphicsViewWH(nwith, nheight);    qgraphicsScene->addItem(pImage);    ui.graphicsViewVideoPro->setSceneRect(QRectF(-(nwith / 2), -(nheight / 2), nwith, nheight));    ui.graphicsViewVideoPro->setScene(qgraphicsScene);  }}

以上就是逻辑的实现

效果如下

bd2b55b5c1b9bb83d2a8f3aa9c6297ab.png

5ecf7342002931abf12c9fd8a6a8cee0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值