基于VideoInput的摄像头操作类

来源:互联网 发布:淘宝里的金牌卖家 编辑:程序博客网 时间:2024/06/06 08:59

这段时间做毕设,项目与摄像头采集图像相关,记录于此备忘。

因为设备采用的是比较旧的USB视频采集卡,所以只能使用videoInput进行操作,于是写了一个Camera类。

Camera.h:

#pragma once#ifndef CAMERA_H#define CAMERA_H#include "stdafx.h"#include "videoInput.h"// 添加静态库#pragma comment(lib, "videoInput.lib")class Camera{private:videoInput* m_VI;int m_deviceID;int m_camera_height;int m_camera_width;public:Camera(){};Camera(int deviceID);~Camera(){};bool open();bool close();bool query_one_frame(IplImage** img);int get_height();int get_width();};#endif



Camera.cpp:

#include "stdafx.h"#include "Camera.h"Camera::Camera(int deviceID){m_deviceID = deviceID;}// 打开摄像头bool Camera::open(){m_VI = new videoInput();m_VI->setupDevice(m_deviceID);      // 启动设备m_VI->setFormat(m_deviceID, VI_SECAM_D);// 设置摄像头的格式m_camera_height = m_VI->getHeight(m_deviceID); // 获取图像高度m_camera_width = m_VI->getWidth(m_deviceID); // 获取图像宽度if(false == m_VI->isDeviceSetup(m_deviceID)){AfxMessageBox(_T("无法获取摄像头!"));return false;}return true;}// 获取一帧图像,出参为imgbool Camera::query_one_frame(IplImage** img){if(NULL == m_VI)return false;*img = cvCreateImage(cvSize(m_camera_width, m_camera_height),8,3);m_VI->getPixels(m_deviceID,(unsigned char*)(*img)->imageData,false,true);// 中值滤波cvSmooth(*img, *img, CV_MEDIAN);return true;}// 关闭摄像头bool Camera::close(){if(NULL == m_VI)return false;m_VI->stopDevice(m_deviceID);m_VI = NULL;return true;}// 获取图像高度int Camera::get_height(){return m_camera_height;}// 获取图像宽度int Camera::get_width(){return m_camera_width;}

videoInput下载戳这里。


转载注明出处。

0 0
原创粉丝点击