《OpenCV》Part2 OpenCV3.1.0调用摄像头显示视频并拍照

《OpenCV》Part2 OpenCV3.1.0调用摄像头显示视频并拍照

1、首先要贴出cv3.0后的控制台程序

code:

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/ml/ml.hpp"

using namespace  std;
using namespace cv;

int main(int argc,char *argv[])
{
	int cameraNumber=0;
	if (argc>1)
		cameraNumber =atoi(argv[1]);
	VideoCapture  camera;
	camera.open (cameraNumber );
	if (!camera .isOpened ())
	{
		cerr<<"ERROPR"<<endl;
		exit(1);
	}

	while(true)
	{
		Mat  cameraFrame;
		camera >>cameraFrame ;
		if (cameraFrame .empty ())
		{
			cerr<<"ERROR1"<<endl;
			exit(1);
		}

		imshow("woqu",cameraFrame );
		char key=cv::waitKey (1000);
		if (key==27)
		{
			break;
		}

	}
}

整合到Qt5.5.0中,具体的代码如下:

code:

getCamera.h

#ifndef GETCAMERA_H
#define GETCAMERA_H

#include <QtWidgets/QMainWindow>
#include "ui_getcamera.h"

#include <QtWidgets/QDialog>
//#include <opencv2/core/core.hpp>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>//for camera
#include <QtCore/QTimer>
#include <QtGui/QPixmap>
#include <QtGui/QImage>

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/ml/ml.hpp"

class getCamera : public QMainWindow
{
	Q_OBJECT

public:
	getCamera(QWidget *parent = 0);
	~getCamera();

private:
	Ui::getCameraClass ui;

	cv::VideoCapture cam;
	cv::Mat          frame;
	QTimer           *timer;


private slots:
	void openCamera();//开摄像头
	void readFrame();//读取当前帧信息
	void closeCamera();//关摄像头
	void takingPictures();//拍照

};

#endif // GETCAMERA_H

getCamera.cpp

#include "getcamera.h"

getCamera::getCamera(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	//构造函数
	cam   = NULL;
	timer = new QTimer(this);
	

	connect(timer,      SIGNAL(timeout()),this,SLOT(readFrame()));
	connect(ui.openCam, SIGNAL(clicked()), this, SLOT(openCamera()));
	connect(ui.takePic, SIGNAL(clicked()), this, SLOT(takingPictures()));
	connect(ui.closeCam, SIGNAL(clicked()), this, SLOT(closeCamera()));
}

getCamera::~getCamera()
{

}

void 
getCamera::openCamera(){
	cam.open(0);
	timer->start(33);
	
	注释后面的是openCV3.0以前的版本,可以参考
	//cam = cvCreateCameraCapture(0);//打开摄像头,从摄像头获取视频,cvCaptureFromCAM其实是一个宏,就是cvCreateCameraCapture的别名,0代表第一个摄像头。-1代表默认摄像头。	
	//timer->start(330);//开始计时,超时则发出timeout()警告
}

void
getCamera::readFrame(){
	cam >> frame;
	QImage img1 = QImage((const unsigned char*)frame.data, frame.cols, frame.rows, QImage::Format_RGB888).rgbSwapped();//个人测试时可以试试去掉.rgbSwapped()后的效果
	ui.label->setPixmap(QPixmap::fromImage(img1));

	///
	//frame = cvQueryFrame(cam);//从摄像头中抓取并返回每一帧
	将抓取的帧,转换为QImage格式。QImage::Format_RGB888不同摄像头使用的格式不同
	//
	//QImage img1 = QImage((const unsigned char*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped();//简单地转换一下为Image对象,rgbSwapped是为了显示效果色彩好一些。
	//ui.label->setPixmap(QPixmap::fromImage(img1));//将图片显示到ui的label中
}


void
getCamera::takingPictures(){
	cam >> frame;
	QImage img2 = QImage((const unsigned char*)frame.data, frame.cols, frame.rows, QImage::Format_RGB888).rgbSwapped();
	ui.label_2->setPixmap(QPixmap::fromImage(img2));
	///
	//frame = cvQueryFrame(cam);//从摄像头抓取并返回每一帧
	将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不同摄像头使用的格式不同
	//QImage img2 = QImage((const unsigned char*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped();
	//ui.label_2->setPixmap(QPixmap::fromImage(img2));//将图片显示到ui的label_2中
}

void
getCamera::closeCamera(){
	timer->stop();
	cam.release();
	///
	//timer->stop();//停止读取数据
	//cvReleaseCapture(&cam);//释放内存
}


运行结果:




  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值