qt下利用opencv从摄像头读出图片并显示源码_第1页
qt下利用opencv从摄像头读出图片并显示源码_第2页
qt下利用opencv从摄像头读出图片并显示源码_第3页
qt下利用opencv从摄像头读出图片并显示源码_第4页
qt下利用opencv从摄像头读出图片并显示源码_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

QT下利用 OpenCv从摄像头读出图片并显示源 码 2012-09-30 11:59:32| 分类: QT and QTOPIA | 标签:camera opencv qt |举报| 字号 订阅 /* *camera.h */ #ifndef _DEMO_H_ #define _DEMO_H_ #include #include #include #include #include #include #include #include #include #include #include “/jpeglib.h“ #include “operation.h“ #include “tcpsocket.h“ #define PORT 3343 /线程类 class SendThread : public QThread public: SendThread(void); void run(); void setImage(QImage public: Send_picture *socket; QImage val; ; /* * *Camera_Operation 类,用来显示摄像头图像采集界面 *1. 打开摄像头 *2. 开始采集 *3. 显示 *4. 暂停 * */ class Camera_Operation : public QDialog Q_OBJECT public: Camera_Operation(QWidget *parent = 0,int i=0); Camera_Operation(); QTabWidget *tabwidget; QWidget *mainwidget; QWidget *twowidget; CvCapture *capture; IplImage *frame; QImage image; QTimer *timer; QPushButton *save; QPushButton *play; QPushButton *puspend; QPushButton *learn; QPushButton *judge; QPushButton *add; QPushButton *creturn; / QUdpSocket *socket; /UDP 协议,传图片 Send_picture *socket; SendThread *thread; public slots: void save_camera(void); void play_camera(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 #include “highgui.h“ #include “cv.h“ #include #include #include #include #include #include #include “camera.h“ #include “/def.h“ #define JPEG_QUALITY 80 char * 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 columns in image */ /* 函数名字:write_JPEG_file 函数功能:压缩一张图片到内存 参 数: 返 回 值: */ 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_error( jpeg_create_compress( jpeg_mem_dest( /指定宽度,高度,RGB cinfo.image_width = 320; cinfo.image_height = 240; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; /采用默认设置 jpeg_set_defaults( /设置图片质量 jpeg_set_quality( /开始压缩 jpeg_start_compress( row_stride = cinfo.image_width * 3; while (cinfo.next_scanline state = CONNECT_ON) QByteArray pic; QBuffer buffer( buffer.open(QIODevice:ReadWrite); val.save( qDebug() Write(pic); void SendThread : setImage(QImage Camera_Operation : Camera_Operation(QWidget *parent,int i) : QDialog(parent) setGeometry(winxstart,winystart,Usewinwide,Usewinhigh); / mainwidget = new QWidget(); play = new QPushButton(“play“,this); 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 QPushButton(“learn“,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(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(timeout(),this,SLOT(read_camera(); / socket = new Send_picture(3343); timer - start(30); Camera_Operation : Camera_Operation() cvReleaseImage( /释放 cvReleaseCapture( /* * *保存图片到 Nand Flash 下/home/picture 目录,文件名从 1.png 开始递增,文 件最大数量 199 * */ void Camera_Operation : save_camera(void) static int i=0; char fileName25; if(i200)i=0; i+; sprintf(fileName,“/home/picture/%d.bmp“,i); qDebug() start(30); /* * *暂停播放,停止定时器 * */ void Camera_Operation : puspend_camera(void) timer - stop(); / cvReleaseImage( void Camera_Operation : return_home(void) timer - stop(); cvReleaseImage( /释放 cvReleaseCapture( close(); /* * *从摄像头中读取一张图片,并保存到 QImage 中 * */ void Camera_Operation : read_camera(void) char *buffer; frame=cvQueryFrame(capture); if(frame=0) QMessageBox:about(this,“warning“,“Cant 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( jpeg_create_compress( jpeg_mem_dest( /指定宽度,高度,RGB cinfo.image_width = frame-width; cinfo.image_height = frame-height; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; /采用默认设置 jpeg_set_defaults( /设置图片质量 jpeg_set_quality( /开始压缩 jpeg_start_compress( row_stride = cinfo.image_width * 3; while (cinfo.next_scanline imageDatacinfo.next_scanline * row_stride; (void) jpeg_write_scanlines( jpeg_finish_compress( jpeg_destroy_compress( printf(“%dn“,size); qDebug() width; qDebug() height; QImage qImage(uchar *)frame-imageData, frame-width, frame-height, frame-widthStep, QImage:Format_RGB888); image=qImage.scaled(200,200); /当读到图片的时候就发送 /* if(socket - state = CONNECT_ON) socket - Write(image_buffer,size); */ free(image_buffer); timer - start(30); update (); /采集到后更新界面 /实现定时器函数 void Camera_Operation : timerEvent(QTimerEvent *event) frame=cvQueryFrame(capture); if(frame=0) QMessageBox:about(this,“warning“,“Cant query the frame“); return; QImage qImage(uchar *)frame-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论