查看: 195|回复: 4

[原创] [up-board]windows应用开发——usb相机(QT+OPENCV)

[复制链接]

9

主题

1

好友

380

积分

秀才

Rank: 3Rank: 3

  • TA的每日心情
    开心
    2017-2-14 15:17
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2017-1-11 16:54:20 |显示全部楼层
    前面介绍了在VS中使用嵌入QT进行开发,同时附带了一个HELLO WORLD的小程序。
    今天的这篇分享加大一点点难度,给up-board做一个可获取图像来源的小程序。
    本篇帖子是为了分享以下几个技巧:
    1.如何使用信号和槽?(点击button,进入到相应的函数,比如下文的点击拍照button,则进行图像获取)
    2.Label如何显示图像?
    3.如何依赖并使用opencv库?(加入opencv库,利用opencv库获取相机图像)

    硬件准备:1.up-board   2.usb摄像头
    1.jpg

    软件准备:1.vs2010或其他版本 2.QT5.5.1或其他版本 3.opencv2.4.10或以上版本

    开发前,请先根据上一篇分享《[up_board]将QT嵌入到VS中开发window应用程序》搭建好QT环境
    步骤1:官网下载好opencv安装文件opencv-2.4.10.exe。
    双击直接解压到指定目录,在环境变量里加入该目录,方便后面使用。
    2.jpg


    步骤2:打开vs,新建一个QT的usbCamera工程。主要以下三个文件:1是界面设计文件,2和3是程序的文件。
    3.jpg


    步骤3:双击usbcamera.ui界面设计文件,从左边的控制栏拖动一个label控件,两个pushbutton,label控件的宽度和高度改为640*480。修改后如下:
    4.jpg


    步骤4:添加opencv的相关路径和依赖,右键usbcamera解决方案,点属性。
    a:在配置属性的c/c++选项卡里,附加包含目录添加之前的环境变量的路径:$(OPENCV_ROOT)\include,如下图
    5.jpg

    b:在配置属性的链接器选项卡->常规->附加库目录添加路径:$(OPENCV_ROOT)\x86\vc10\lib
    6.jpg

    c::在配置属性的链接器选项卡->常规->输入里添加依赖库:
    opencv_core2410.lib
    opencv_highgui2410.lib
    opencv_imgproc2410.lib
    opencv_calib3d2410.lib
    opencv_features2d2410.lib
    7.jpg

    注意:如果用的是debug版本,则依赖库是:
    opencv_core2410d.lib
    opencv_highgui2410d.lib
    opencv_imgproc2410d.lib
    opencv_calib3d2410d.lib
    opencv_features2d2410d.lib

    步骤5:添加代码
    在头文件usbcamera.h的USBcamera类里添加private变量:
    1. CvCapture* cam;    //相机
    2.         IplImage *picture;  //存放相机图像
    复制代码
    添加槽private slots:
    1. private slots:
    2.                 void openUSBcamera();    //槽函数,当点击打开相机的button,调用此函数
    3.                 void getPicture();             //槽函数,当点击打拍照的button,调用此函数
    复制代码
    在源文件usbcamera.cpp里添加代码:
    1. USBcamera::USBcamera(QWidget *parent)
    2.         : QMainWindow(parent)
    3. {
    4.    ui.setupUi(this);
    5.    ui.takePhotoButton->setEnabled(false);
    6.    connect(ui.takePhotoButton, SIGNAL(clicked()),this, SLOT(getPicture()));    //信号和槽关联
    7.    connect(ui.openCameraButton, SIGNAL(clicked()),this, SLOT(openUSBcamera()));//信号和槽关联
    8. }
    复制代码
    打开相机的处理函数:
    1. void USBcamera::openUSBcamera(){
    2.         if (ui.openCameraButton->text()==QString::fromLocal8Bit("打开相机"))
    3.         {
    4.                 cam=cvCreateCameraCapture(0);
    5.                 if( cam==NULL )
    6.                 {
    7.                         QMessageBox::critical(this,"Error","can't open camera");
    8.                 }
    9.                 ui.openCameraButton->setText(QString::fromLocal8Bit("关闭相机"));
    10.                 ui.takePhotoButton->setEnabled(true);
    11.         }
    12.         else{
    13.                 cvReleaseCapture(&cam);
    14.                 ui.openCameraButton->setText(QString::fromLocal8Bit("打开相机"));
    15.                 ui.takePhotoButton->setEnabled(false);
    16.         }
    17. }
    复制代码
    在拍照和在label显示图像的处理函数
    1. void USBcamera::getPicture(){
    2.         picture=cvQueryFrame(cam);
    3.         if (picture) {
    4.                 cv::Mat img(picture);
    5.                 cv::cvtColor(img,img,CV_BGR2RGB);  
    6.                 QImage image((uchar *)img.data,picture->width,picture->height,QImage::Format_RGB888);
    7.                 ui.display->setPixmap(QPixmap::fromImage(image.scaledToWidth(ui.display->width())));
    8.         }
    9. }
    复制代码
    在上面的代码非常短,内容也非常简单,这里就不讲解了,如果有问题就在下面发贴问吧,这里不作详细介绍了。

    步骤6:到上面为此,代码已经全部添加完毕,那么我们试编译运行,看看效果怎么样,但是弹出以下错误:
    8.jpg

    不用担心,是因为生成的exe目录缺少opencv的动态库,去到\opencv\build\x86\vc10\bin,把提示缺少的动态一一拷贝过去便可以了。
    重新运行,出现以下窗口:
    9.jpg

    点击打开相机,拍照,就可以得到图像,相片为小可爱up-board
    10.jpg


    ok,enjoy yourself
    回复

    使用道具 举报

    9

    主题

    1

    好友

    380

    积分

    秀才

    Rank: 3Rank: 3

  • TA的每日心情
    开心
    2017-2-14 15:17
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2017-1-11 17:02:36 |显示全部楼层
    usbCamera.7z (6.88 MB, 下载次数: 2) 已经打包好相应的库了,可以在up_board直接运行。
    回复

    使用道具 举报

    5

    主题

    1

    好友

    878

    积分

    举人

    Rank: 4

  • TA的每日心情
    开心
    昨天 09:03
  • 签到天数: 73 天

    [LV.6]常住居民II

    发表于 2017-1-11 17:34:10 |显示全部楼层
    这么快就玩起来了,厉害啊            
    回复

    使用道具 举报

    7

    主题

    0

    好友

    1135

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    开心
    昨天 23:21
  • 签到天数: 194 天

    [LV.7]常住居民III

    发表于 2017-1-11 20:47:23 |显示全部楼层
    这个很详细!
    回复

    使用道具 举报

    10

    主题

    0

    好友

    976

    积分

    举人

    Rank: 4

  • TA的每日心情
    开心
    2016-7-19 10:35
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2017-1-11 21:39:23 |显示全部楼层
    好贴,顶
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-2-25 06:17 , Processed in 0.180131 second(s), 15 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部