⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picture.cpp

📁 一个linux下的摄像头编程
💻 CPP
字号:
/****************************************************************************** $Id: qt/examples/picture/picture.cpp   2.3.1   edited 2001-02-20 $**** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.**** This file is part of an example program for Qt.  This example** program may be used, distributed and modified without limitation.*******************************************************************************/#define HANDLE _AvoidTypedefConflictWidthQT#include "cam.h"// include opencv#include <cv.h>#include <cvvis.h>#include <ipl.h>#undef HANDLE#include <qapplication.h>#include <qpainter.h>#include <qpicture.h>#include <qpixmap.h>#include <qwidget.h>#include <qmessagebox.h>#include <qfile.h>#include <ctype.h>#include <qimage.h>#include <qsplitter.h>#include <qthread.h>#include <iostream>QMutex m;class PictureDisplay : public QWidget		// picture display widget{public:    PictureDisplay(QWidget* parent, const char* name=0, int f=0);   ~PictureDisplay();protected:    void	paintEvent( QPaintEvent * );public :    QPixmap pixmap;private:};PictureDisplay::PictureDisplay(QWidget* parent, const char* name, int f):QWidget(parent, name, f){	;}PictureDisplay::~PictureDisplay(){;}void PictureDisplay::paintEvent( QPaintEvent * ){	QPainter paint( this );			// paint widget	m.lock();	paint.drawPixmap( 0, 0, pixmap );	m.unlock();}           void foo(IplImage *ipl_img ,QImage *q){	int x;	int y;	char *data = ipl_img->imageData;	for( y = 0; y < ipl_img->height; y++, data += ipl_img->widthStep )                for( x = 0; x < ipl_img->width; x++ )	            {		    			uint *p = (uint*)q->scanLine(y) + x;		        		*p = qRgb(data[x * ipl_img->nChannels+2],data[x * ipl_img->nChannels +1],data[x * ipl_img->nChannels]);	             }}class Capturer : public QThread {	public:	Capturer(int camnr);	~Capturer();    virtual void run();    PictureDisplay *p;	IplImage *i;	CCamera	c;	QImage	*q;};Capturer :: Capturer(int camnr){	c.connect(camnr);   CvSize sz = cvSize(320,240);	c.setSize(sz);	i = cvCreateImage(sz,8,3);	q = new QImage();	q->create(320,240,32);}Capturer :: ~Capturer(){	c.disconnect();	delete(q);}void Capturer ::run(){    while(true)    {		c.capture(i);		foo(i,q);		m.lock();		p->pixmap.convertFromImage(*q);		m.unlock();		p->repaint();    }}int main( int argc, char **argv ){    QApplication a( argc, argv );		// QApplication required!	cvvInitSystem(0,0);	QSplitter *s1 = new QSplitter( QSplitter::Vertical, 0 , "main" );	PictureDisplay *test = new PictureDisplay(s1);		// create picture display	a.setMainWidget(s1);			// set main widget	s1->show();				// show it		Capturer t1(0);	t1.p = test;	t1.start();	return a.exec();				// start event loop}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -