83 lines
2.2 KiB
C++
83 lines
2.2 KiB
C++
#ifndef __SV_CAMERA_PRIVATELY__
|
|
#define __SV_CAMERA_PRIVATELY__
|
|
|
|
#include "opencv2/opencv.hpp"
|
|
#include <stdint.h>
|
|
#include <thread>
|
|
#include <mutex>
|
|
#include <condition_variable>
|
|
#include "sv_camera.h"
|
|
|
|
namespace sv_p
|
|
{
|
|
|
|
class CameraBase
|
|
{
|
|
public:
|
|
// 图像的属性
|
|
int _width = 1280;
|
|
int _height = 720;
|
|
int _fps = 30;
|
|
|
|
float _brightness = -1;
|
|
float _contrast = -1;
|
|
float _saturation = -1;
|
|
float _hue = -1;
|
|
float _exposure = -1;
|
|
|
|
int _timeOut;
|
|
|
|
// 内部状态
|
|
float fpsCurr = -1;
|
|
bool isGot = false;
|
|
|
|
// 内部变量
|
|
cv::Mat imageBuff;
|
|
std::mutex frameMutex;
|
|
std::condition_variable_any frameEmpty;
|
|
std::thread::native_handle_type readThreadHandle = 0;
|
|
cv::VideoCapture cap;
|
|
// 获取图像的线程 在这个线程中查询、提取图像
|
|
virtual void readThread(void);
|
|
// 属性设置的接口
|
|
virtual void setWH(int width, int height);
|
|
// 基本属性 至少实现1个
|
|
virtual bool setStream(const std::string &ip, uint16_t port) { return false; }
|
|
virtual bool setName(const std::string &name) { return false; }
|
|
virtual bool setIndex(int index) { return false; }
|
|
|
|
// 扩展属性设置 默认调用opencv的实现
|
|
virtual void setFps(int fps);
|
|
virtual void setBrightness(float brightness);
|
|
virtual void setContrast(float contrast);
|
|
virtual void setSaturation(float saturation);
|
|
virtual void setHue(float hue);
|
|
virtual void setExposure(float exposure);
|
|
|
|
// 属性获取的接口
|
|
virtual sv::CameraType getType(void) { return sv::CameraType::NONE; }
|
|
virtual std::string getName(void) { return "\0"; };
|
|
|
|
virtual bool isActive(void) { return (readThreadHandle == 0 ? false : true); }
|
|
int getW(void) { return _width; }
|
|
int getH(void) { return _height; }
|
|
int getExpectFps(void) { return _fps; }
|
|
float getFps(void) { return fpsCurr; }
|
|
float getBrightness(void) { return _brightness; }
|
|
float getContrast(void) { return _contrast; }
|
|
float getSaturation(void) { return _saturation; }
|
|
float getHue(void) { return _hue; }
|
|
float getExposure(void) { return _exposure; }
|
|
|
|
// 功能接口函数
|
|
virtual bool open(void) = 0;
|
|
virtual bool read(cv::Mat &image);
|
|
virtual bool readNoBlock(cv::Mat &image);
|
|
virtual void release(void);
|
|
|
|
CameraBase(int timeOut = 500);
|
|
~CameraBase();
|
|
};
|
|
|
|
}
|
|
#endif |