版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、qt 下利用 opencv 從攝像頭讀出圖片并顯示源碼2012-09-30 11:59:32| 分類: qt and qtopia | 標(biāo)簽:camera opencv qt |舉報|字號 訂閱/*camera.h*/#ifndef _demo_h_ #define _demo_h_#include <qwidget>#include <highgui.h> #include <cv.h> #include <qtimer> #include <qimage> #include <qpainter> #include &l
2、t;qtgui> #include <qthread> #include <qtnetwork> #include <qapplication>#include “./jpeglib.h“#include “operation.h“ #include “tcpsocket.h“#define port3343/線程類class sendthread : public qthreadpublic:sendthread(void); void run();void setimage(qimage & image);public:send_pictu
3、re *socket; qimage val;/*camera_operation 類,用來顯示攝像頭圖像采集界面*1. 打開攝像頭*2. 開頭采集*3. 顯示*4. 暫停*/class camera_operation : public qdialogq_objectpublic:camera_operation(qwidget *parent = 0,int i=0);camera_operation();qtabwidget *tabwidget; qwidget *mainwidget; qwidget *twowidget; cvcapture *capture; iplimage
4、*frame;qimage image; qtimer *timer; qpushbutton *save; qpushbutton *play;qpushbutton *puspend; qpushbutton *learn; qpushbutton *judge; qpushbutton *add; qpushbutton *creturn;/ qudpsocket *socket;/udp 協(xié)議,傳圖片send_picture *socket; sendthread *thread;public slots:void save_camera(void); void play_camera
5、(void); void puspend_camera(void); void read_camera(void); void return_home(void);protected:void timerevent(qtimerevent *event); void paintevent(qpaintevent *);#endif/-/*camera.cpp*/#include <qtgui> #include “highgui.h“ #include “cv.h“ #include <qtimer> #include <qimage> #include &
6、lt;qpainter> #include <qtgui>#include <qapplication> #include <qdebug>#include “camera.h“ #include “./def.h“#define jpeg_quality 80char * image_buffer; /* points to large array of r,g,b-order data */ int image_height; /* number of rows in image */int image_width; /* number of co
7、lumns in image */*函數(shù)名字:write_jpeg_file函數(shù)功能:壓縮一張圖片到內(nèi)存參數(shù):返 回 值:*/ unsigned long write_jpeg_file (unsigned char *target,char *buffer, int width,int height)struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; jsamprow row_pointer1;int row_stride; unsigned long size;/指定錯誤處理器cinfo.err = jpeg_std
8、_error(&jerr); jpeg_create_compress(&cinfo); jpeg_mem_dest(&cinfo,&target,&size);/指定寬度,高度,rgbcinfo.image_width = 320;cinfo.image_height = 240;cinfo.input_components = 3; cinfo.in_color_space = jcs_rgb;/接受默認(rèn)設(shè)置jpeg_set_defaults(&cinfo);/設(shè)置圖片質(zhì)量jpeg_set_quality(&cinfo, 80, tr
9、ue);/開頭壓縮jpeg_start_compress(&cinfo, true); row_stride = cinfo.image_width * 3;while (cinfo.next_scanline < cinfo.image_height) row_pointer0 =(jsamprow) & buffercinfo.next_scanline * row_stride; (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);jpeg_finish_compress(&cinfo); jpeg
10、_destroy_compress(&cinfo);return size;sendthread : sendthread(void)socket = new send_picture(3343);/*線程 run 方法,用來發(fā)送圖片到上位機*/void sendthread : run(void)if(socket -> state = connect_on) qbytearray pic;qbuffer buffer(&pic); buffer.open(qiodevice:readwrite); val.save(&buffer, “png“);qdebug
11、() << buffer.size(); socket -> write(pic);void sendthread : setimage(qimage & image)val = image;camera_operation : camera_operation(qwidget *parent,int i) : qdialog(parent)setgeometry(winxstart,winystart,usewinwide,usewinhigh);/ mainwidget = new qwidget();play = new qpushbutton(“play“,t
12、his); play -> setgeometry(10,20,75,40);puspend = new qpushbutton(“puspend“,this); puspend -> setgeometry(10,70,75,40);save = new qpushbutton(“save“,this); save -> setgeometry(10,120,75,40);creturn = new qpushbutton(“return“,this); creturn -> setgeometry(10,170,75,40);learn = new qpushbut
13、ton(“l(fā)earn“,this); learn -> setgeometry(270,220,65,40);judge = new qpushbutton(“judge“,this); judge -> setgeometry(340,220,65,40);add = new qpushbutton(“add“,this); add -> setgeometry(410,220,65,40);timer = new qtimer(this);/ if(i=0)if(!(capture = cvcreatecameracapture(-1)qmessagebox:about(
14、this,“warning“,“cant open the camero“); return;/ connect(save,signal(clicked(),this,slot(save_camera(); connect(play,signal(clicked(),this,slot(play_camera(); connect(puspend,signal(clicked(),this,slot(puspend_camera(); connect(creturn,signal(clicked(),this,slot(return_home(); connect(timer,signal(t
15、imeout(),this,slot(read_camera();/ socket = new send_picture(3343); timer -> start(30);camera_operation : camera_operation()cvreleaseimage(&frame);/釋放cvreleasecapture(&capture);/*保存圖片到 nand flash 下/home/picture 名目,文件名從 1.png 開頭遞增,文件最大數(shù)量 199*/void camera_operation : save_camera(void)static
16、 int i=0;char filename25; if(i>200)i=0;i+;sprintf(filename,“/home/picture/%d.bmp“,i); qdebug() << filename; image.save(filename);/*開頭播放,打開定時器*/void camera_operation : play_camera(void)/ starttimer(50); timer -> start(30);/*暫停播放,停止定時器*/void camera_operation : puspend_camera(void)timer -&g
17、t; stop();/ cvreleaseimage(&frame);void camera_operation : return_home(void)timer -> stop(); cvreleaseimage(&frame);/釋放cvreleasecapture(&capture); close();/*從攝像頭中讀取一張圖片,并保存到 qimage 中*/void camera_operation : read_camera(void)char *buffer; frame=cvqueryframe(capture); if(frame=0)qmessa
18、gebox:about(this,“warning“,“can”t query the frame“); timer -> stop();return;/圖像編碼image_buffer = (char*)malloc(512*1025);struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; jsamprow row_pointer1;int row_stride; unsigned long size;/指定錯誤處理器cinfo.err = jpeg_std_error(&jerr); jpeg_creat
19、e_compress(&cinfo);jpeg_mem_dest(&cinfo,(unsigned char*)&(image_buffer),&size);/指定寬度,高度,rgb cinfo.image_width = frame->width; cinfo.image_height = frame->height; cinfo.input_components = 3; cinfo.in_color_space = jcs_rgb;/接受默認(rèn)設(shè)置jpeg_set_defaults(&cinfo);/設(shè)置圖片質(zhì)量jpeg_set_qual
20、ity(&cinfo, 80, true);/開頭壓縮jpeg_start_compress(&cinfo, true); row_stride = cinfo.image_width * 3;while (cinfo.next_scanline < cinfo.image_height) row_pointer0 =(jsamprow) & frame->imagedatacinfo.next_scanline * row_stride;(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);jpeg
21、_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo);printf(“%dn“,size);qdebug() << “size = “ ; qdebug() << size;qdebug() << “width = “ ; qdebug() << frame->width; qdebug() << “height = “ ; qdebug() << frame->height;qimage qimage(uchar *)frame->imagedata, frame->width, frame->height, fra
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 佛山市影劇院租賃合同范本
- 新公司設(shè)立可行性研究報告及實施策略
- 網(wǎng)絡(luò)短視頻拍攝制作合同
- 協(xié)同育人概述與理論基礎(chǔ)
- 2025試用合同書范例合同書樣本
- 2023年注冊環(huán)保工程師之注冊環(huán)保工程師專業(yè)基礎(chǔ)題庫與答案
- 泉州海洋職業(yè)學(xué)院《碑學(xué)和帖學(xué)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 泉州紡織服裝職業(yè)學(xué)院《刑事案例分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 2023年中級注冊安全工程師之安全生產(chǎn)技術(shù)基礎(chǔ)自我檢測試卷B卷附答案
- 垃圾回收能源的利用與利益分配
- 學(xué)術(shù)研究倫理審查申請范本
- 中國紅色文化精神智慧樹知到答案2024年西安交通大學(xué)
- 醫(yī)院門診排班與號源管理制度
- 智能算力數(shù)據(jù)中心安全性與數(shù)據(jù)隱私保護(hù)分析
- 2022-2023學(xué)年貴陽市數(shù)學(xué)九年級第一學(xué)期期末聯(lián)考試題含解析
- 涼山彝族自治州2022-2023學(xué)年七年級上學(xué)期期末地理試題
- 2025年日歷臺歷中文版縱向排版帶節(jié)假日調(diào)休周日開始
- 污水處理站操作人員安全培訓(xùn)手冊
- 健康管理實務(wù)考試題+參考答案
- 2021-2022學(xué)年北京市豐臺區(qū)北京版二年級上冊期末測試數(shù)學(xué)試卷
- 老舊排水管網(wǎng)改造 投標(biāo)方案(技術(shù)方案)
評論
0/150
提交評論