免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
QT openCV 實現(xiàn)攝像頭采集以及拍照功能

      今天寫的QT+openCV實現(xiàn)攝像頭拍照功能。

在網上收羅了很多資料,QT沒有專門操作攝像頭的類,這個得自己寫。網上也有很多關務openCV和V4l的一些介紹,由于我項目要在window下開發(fā),所以就選擇了openCV。由于以前沒有用過openCV,所以就只看了關于openCVS攝像頭操作的這部分,其他的還沒時間去看。

openCV : http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.1/  

剛開始下載的是2.3.1的,安裝后發(fā)現(xiàn)沒有l(wèi)ib庫所以后面選擇了2.1的

openCV中文學習 pdf  :

現(xiàn)在,開始詳細的介紹如何在QT中實時的采集攝像頭數(shù)據。

打開QTcreator (我用的是QT 2.3的 中文版)

新建一個widget工程


界面上放兩個label 分別用來顯示攝像頭采集到的數(shù)據和照的照片。




編輯camaraget.h 文件

  1. #ifndef CAMARAGET_H   
  2. #define CAMARAGET_H   
  3.   
  4. #include <QWidget>   
  5. #include <QImage>   
  6. #include <QTimer>     // 設置采集數(shù)據的間隔時間   
  7.   
  8. #include <highgui.h>  //包含opencv庫頭文件   
  9. #include <cv.h>   
  10.   
  11. namespace Ui {  
  12.     class camaraGet;  
  13. }  
  14.   
  15. class camaraGet : public QWidget  
  16. {  
  17.     Q_OBJECT  
  18.   
  19. public:  
  20.     explicit camaraGet(QWidget *parent = 0);  
  21.     ~camaraGet();  
  22.   
  23. private slots:  
  24.     void openCamara();      // 打開攝像頭   
  25.     void readFarme();       // 讀取當前幀信息   
  26.     void closeCamara();     // 關閉攝像頭。   
  27.     void takingPictures();  // 拍照   
  28.   
  29. private:  
  30.     Ui::camaraGet *ui;  
  31.     QTimer    *timer;  
  32.     QImage    *imag;  
  33.     CvCapture *cam;// 視頻獲取結構, 用來作為視頻獲取函數(shù)的一個參數(shù)   
  34.     IplImage  *frame;//申請IplImage類型指針,就是申請內存空間來存放每一幀圖像   
  35. };  
  36.   
  37. #endif // CAMARAGET_H  

編輯camaraget.cpp

  1. #include "camaraget.h"   
  2. #include "ui_camaraget.h"   
  3.   
  4. camaraGet::camaraGet(QWidget *parent) :  
  5.     QWidget(parent),  
  6.     ui(new Ui::camaraGet)  
  7. {  
  8.     ui->setupUi(this);  
  9.   
  10.     cam     = NULL;  
  11.     timer   = new QTimer(this);  
  12.     imag    = new QImage();         // 初始化   
  13.   
  14.     /*信號和槽*/  
  15.     connect(timer, SIGNAL(timeout()), this, SLOT(readFarme()));  // 時間到,讀取當前攝像頭信息   
  16.     connect(ui->open, SIGNAL(clicked()), this, SLOT(openCamara()));  
  17.     connect(ui->pic, SIGNAL(clicked()), this, SLOT(takingPictures()));  
  18.     connect(ui->closeCam, SIGNAL(clicked()), this, SLOT(closeCamara()));  
  19. }  
  20.   
  21. /****************************** 
  22. ********* 打開攝像頭 *********** 
  23. *******************************/  
  24. void camaraGet::openCamara()  
  25. {  
  26.     cam = cvCreateCameraCapture(0);//打開攝像頭,從攝像頭中獲取視頻   
  27.   
  28.     timer->start(33);              // 開始計時,超時則發(fā)出timeout()信號   
  29. }  
  30.   
  31. /********************************* 
  32. ********* 讀取攝像頭信息 *********** 
  33. **********************************/  
  34. void camaraGet::readFarme()  
  35. {  
  36.     frame = cvQueryFrame(cam);// 從攝像頭中抓取并返回每一幀   
  37.     // 將抓取到的幀,轉換為QImage格式。QImage::Format_RGB888不同的攝像頭用不同的格式。   
  38.     QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);  
  39.     ui->label->setPixmap(QPixmap::fromImage(image));  // 將圖片顯示到label上   
  40. }  
  41.   
  42. /************************* 
  43. ********* 拍照 *********** 
  44. **************************/  
  45. void camaraGet::takingPictures()  
  46. {  
  47.     frame = cvQueryFrame(cam);// 從攝像頭中抓取并返回每一幀   
  48.   
  49.     // 將抓取到的幀,轉換為QImage格式。QImage::Format_RGB888不同的攝像頭用不同的格式。   
  50.     QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);  
  51.   
  52.     ui->label_2->setPixmap(QPixmap::fromImage(image));  // 將圖片顯示到label上   
  53. }  
  54.   
  55. /******************************* 
  56. ***關閉攝像頭,釋放資源,必須釋放*** 
  57. ********************************/  
  58. void camaraGet::closeCamara()  
  59. {  
  60.     timer->stop();         // 停止讀取數(shù)據。   
  61.   
  62.     cvReleaseCapture(&cam);//釋放內存;   
  63. }  
  64.   
  65. camaraGet::~camaraGet()  
  66. {  
  67.     delete ui;  
  68. }  

好了,全部代碼都OK了(當然,創(chuàng)建工程時,會生成main.cpp,不必去改動它),但現(xiàn)在你點運行,依然會產生錯誤,為什么呢?因為還沒有把openCV的庫包含進去。

在*.pro 文件中 加入:

INCLUDEPATH+=C:\OpenCV2.1\include\opencv

	LIBS += C:\OpenCV2.1\lib\highgui210.lib \
 	 C:\OpenCV2.1\lib\cxcore210.lib \
 	 C:\OpenCV2.1\lib\cv210.lib
OK,大功告成,運行后,在widget中點擊打開攝像頭,就可以看到自己了。運行后的效果:




后來我發(fā)現(xiàn)這個效果不怎么好,就改了一下:改了以后的運行效果也貼出來:


就改了一句:

  1. QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);  
  1. 改為了 QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped();  



本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Qt Opencv 在Linux下攝像頭簡單示例v1.0
Qt5中進行OpenCV開發(fā)教程
基于QT和opencv的攝像頭讀取并輸出程序
opencv+qt+beaglebone 之獲取攝像頭數(shù)據。
Qt 5——繪圖和繪圖設備
<QT> Qt學習筆記--編程技巧總結
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服