SpireCV/video_io/sv_camera_privately.h

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