OpenCV3.2+Qt5.8.0+Win10配置和使用----打开笔记本摄像头

25 篇文章 14 订阅

一、步骤

1、新建Qt工程

2、在Pro文件中添加opencv 库的头文件和源文件路径

3、在Ui布局中,放入Label 部件,并将栅格化(为了视频能随着窗口大小做调整), 最终视频要在Label上显示

4、具体代码思路

利用opencv中的VideoCapture 类中的 成员函数open()来打开摄像头

将每次读取的摄像头数据处理成能在label 部件中显示的数据格式,然后显示在Label中。

(1)下面的代码实现是实现Mat格式转换为QImage格式

QImage  CameraManage::Mat2QImage(Mat& cvImg)  // Mat格式转换为QImage格式
{
    QImage qImg;
    if(cvImg.channels()==3)                             //3 channels color image
    {

        cv::cvtColor(cvImg,cvImg,CV_BGR2RGB);
        qImg =QImage((const unsigned char*)(cvImg.data),
                    cvImg.cols, cvImg.rows,
                    cvImg.cols*cvImg.channels(),
                    QImage::Format_RGB888);
    }
    else if(cvImg.channels()==1)                    //grayscale image
    {
        qImg =QImage((const unsigned char*)(cvImg.data),
                    cvImg.cols,cvImg.rows,
                    cvImg.cols*cvImg.channels(),
                    QImage::Format_Indexed8);
    }
    else
    {
        qImg =QImage((const unsigned char*)(cvImg.data),
                    cvImg.cols,cvImg.rows,
                    cvImg.cols*cvImg.channels(),
                    QImage::Format_RGB888);
    }

    return qImg;

}


(2)下面的代码实现是使图片能适应Lable部件

QImage CameraManage::ScaleImage2Label(QImage qImage, QLabel* qLabel) // 使图片能适应Lable部件
{
    QImage qScaledImage;
    QSize qImageSize = qImage.size();
    QSize qLabelSize = qLabel->size();
    double dWidthRatio = 1.0*qImageSize.width() / qLabelSize.width();
    double dHeightRatio = 1.0*qImageSize.height() / qLabelSize.height();
    if (dWidthRatio>dHeightRatio)
    {
        qScaledImage = qImage.scaledToWidth(qLabelSize.width());
    }
    else
    {
        qScaledImage = qImage.scaledToHeight(qLabelSize.height());
    }
    return qScaledImage;
}

(3)下面的代码实现是打开笔记本摄像头

void CameraManage::openCamera()
{
    cap.open(0);   //笔记本一般是0  open函数直接能打开USB摄像头,也能打开网络摄像头,具体参数,直接百度, 也能直接打开图片、视频
    timer->start(33);              // 开始计时,超时则发出timeout()信号
}

(4)下面的代码实现的是读取摄像头的每一帧数据并作处理,完后在Label部件上显示出来

void CameraManage::readFarme()
{
    cap >> frame;

    image = Mat2QImage(frame);
    
    QImage scaleImage = ScaleImage2Label( image, ui->lb_display );   // 显示到label上
    ui->lb_display->setPixmap(QPixmap::fromImage(scaleImage));
    ui->lb_display->setAlignment(Qt::AlignCenter);
    ui->lb_display->show();
}

5、结果展示

 

二、完整代码分享

1、下载地址如下

https://pan.baidu.com/s/1t43kr2KqnY2BGj9jGYHV3g

2、csdn的下载链接

https://download.csdn.net/download/qq_38880380/10921579

 

其他请见:

OpenCV3.2+Qt5.8.0+Win10配置和使用----(1)Qt5.8.0的安装

OpenCV3.2+Qt5.8.0+Win10配置和使用----(2)CMake的安装

OpenCV3.2+Qt5.8.0+Win10配置和使用----(3)opencv3.2的配置

OpenCV3.2+Qt5.8.0+Win10配置和使用----(4)配置环境变量+编译opencv&opencv-contrib

OpenCV3.2+Qt5.8.0+Win10配置和使用----(5)打开笔记本摄像头

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

worthsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值