TA的每日心情 | 开心 2018-9-18 07:18 |
---|
签到天数: 18 天 连续签到: 1 天 [LV.4]偶尔看看III
|
前面介绍了在VS中使用嵌入QT进行开发,同时附带了一个HELLO WORLD的小程序。
今天的这篇分享加大一点点难度,给up-board做一个可获取图像来源的小程序。
本篇帖子是为了分享以下几个技巧:
1.如何使用信号和槽?(点击button,进入到相应的函数,比如下文的点击拍照button,则进行图像获取)
2.Label如何显示图像?
3.如何依赖并使用opencv库?(加入opencv库,利用opencv库获取相机图像)
硬件准备:1.up-board 2.usb摄像头
软件准备:1.vs2010或其他版本 2.QT5.5.1或其他版本 3.opencv2.4.10或以上版本
开发前,请先根据上一篇分享《[up_board]将QT嵌入到VS中开发window应用程序》搭建好QT环境
步骤1:官网下载好opencv安装文件opencv-2.4.10.exe。
双击直接解压到指定目录,在环境变量里加入该目录,方便后面使用。
步骤2:打开vs,新建一个QT的usbCamera工程。主要以下三个文件:1是界面设计文件,2和3是程序的文件。
步骤3:双击usbcamera.ui界面设计文件,从左边的控制栏拖动一个label控件,两个pushbutton,label控件的宽度和高度改为640*480。修改后如下:
步骤4:添加opencv的相关路径和依赖,右键usbcamera解决方案,点属性。
a:在配置属性的c/c++选项卡里,附加包含目录添加之前的环境变量的路径:$(OPENCV_ROOT)\include,如下图
b:在配置属性的链接器选项卡->常规->附加库目录添加路径:$(OPENCV_ROOT)\x86\vc10\lib
c::在配置属性的链接器选项卡->常规->输入里添加依赖库:
opencv_core2410.lib
opencv_highgui2410.lib
opencv_imgproc2410.lib
opencv_calib3d2410.lib
opencv_features2d2410.lib
注意:如果用的是debug版本,则依赖库是:
opencv_core2410d.lib
opencv_highgui2410d.lib
opencv_imgproc2410d.lib
opencv_calib3d2410d.lib
opencv_features2d2410d.lib
步骤5:添加代码
在头文件usbcamera.h的USBcamera类里添加private变量:- CvCapture* cam; //相机
- IplImage *picture; //存放相机图像
复制代码 添加槽private slots:- private slots:
- void openUSBcamera(); //槽函数,当点击打开相机的button,调用此函数
- void getPicture(); //槽函数,当点击打拍照的button,调用此函数
复制代码 在源文件usbcamera.cpp里添加代码:- USBcamera::USBcamera(QWidget *parent)
- : QMainWindow(parent)
- {
- ui.setupUi(this);
- ui.takePhotoButton->setEnabled(false);
- connect(ui.takePhotoButton, SIGNAL(clicked()),this, SLOT(getPicture())); //信号和槽关联
- connect(ui.openCameraButton, SIGNAL(clicked()),this, SLOT(openUSBcamera()));//信号和槽关联
- }
复制代码 打开相机的处理函数:- void USBcamera::openUSBcamera(){
- if (ui.openCameraButton->text()==QString::fromLocal8Bit("打开相机"))
- {
- cam=cvCreateCameraCapture(0);
- if( cam==NULL )
- {
- QMessageBox::critical(this,"Error","can't open camera");
- }
- ui.openCameraButton->setText(QString::fromLocal8Bit("关闭相机"));
- ui.takePhotoButton->setEnabled(true);
- }
- else{
- cvReleaseCapture(&cam);
- ui.openCameraButton->setText(QString::fromLocal8Bit("打开相机"));
- ui.takePhotoButton->setEnabled(false);
- }
- }
复制代码 在拍照和在label显示图像的处理函数- void USBcamera::getPicture(){
- picture=cvQueryFrame(cam);
- if (picture) {
- cv::Mat img(picture);
- cv::cvtColor(img,img,CV_BGR2RGB);
- QImage image((uchar *)img.data,picture->width,picture->height,QImage::Format_RGB888);
- ui.display->setPixmap(QPixmap::fromImage(image.scaledToWidth(ui.display->width())));
- }
- }
复制代码 在上面的代码非常短,内容也非常简单,这里就不讲解了,如果有问题就在下面发贴问吧,这里不作详细介绍了。
步骤6:到上面为此,代码已经全部添加完毕,那么我们试编译运行,看看效果怎么样,但是弹出以下错误:
不用担心,是因为生成的exe目录缺少opencv的动态库,去到\opencv\build\x86\vc10\bin,把提示缺少的动态一一拷贝过去便可以了。
重新运行,出现以下窗口:
点击打开相机,拍照,就可以得到图像,相片为小可爱up-board
ok,enjoy yourself |
|