#pragma once #include "opencv2/core.hpp" #include "opencv2/features2d.hpp" #include "opencv2/core/affine.hpp" #include "opencv2/calib3d.hpp" #include "shared/Matrices.h" #include #include class CameraApp; class OpenCVProcess { public: OpenCVProcess( CameraApp * parent ); ~OpenCVProcess(); bool OpenCVAppStart(); void OpenCVAppUpdate(); void Thread(); void Prerender(); void TakeScreenshot(); void ConvertToGray( cv::InputArray src, cv::OutputArray dst ); void BlurDepths(); Vector4 TransformToWorldSpace( float x, float y, int disp ); Vector4 TransformToLocalSpace( float x, float y, int disp ); vr::TrackedCameraHandle_t m_pCamera; struct { float fx, cx, fy, cy; } m_cameraIntrinsics[2]; vr::HmdMatrix34_t m_headFromCamera[2]; Vector4 m_centerFromLeftEye; cv::Mat m_leftMap1, m_leftMap2, m_rightMap1, m_rightMap2; Matrix4 m_R1, m_R1inv, m_Q, m_Qinv; cv::Ptr< cv::StereoSGBM > m_stereo; CameraApp * m_parent; uint8_t * m_pFrameBuffer; uint8_t * m_pFBSides[2]; uint32_t * m_pFBSidesColor[2]; uint16_t * m_pDisparity; uint32_t * m_pColorOut; uint32_t * m_pColorOut2; uint32_t m_iFBSideWidth; uint32_t m_iFBSideHeight; std::vector< float > m_valids; std::vector< float > m_depths; uint32_t m_iFBAlgoWidth; uint32_t m_iFBAlgoWidthExp; uint32_t m_iFBAlgoHeight; uint32_t m_iProcFrames; uint32_t m_iFramesSinceFPS, m_iFPS; double m_dTimeOfLastFPS; uint32_t m_iFrameBufferLength; int m_iHasFrameForUpdate; int m_iDoneFrameOutput; vr::CameraVideoStreamFrameHeader_t m_lastFrameHeader; Matrix4 m_lastFrameHeaderMatrix; float m_CameraDistanceMeters; cv::Mat m_cvQ; std::thread * m_pthread; bool m_bQuitThread; float fNAN; bool m_bScreenshotNext; int m_iCurrentStereoAlgorithm; unsigned int m_iPBOids[2]; unsigned int m_iGLfrback; unsigned int m_iGLimback; //Matrices used in the stereo computation. cv::Mat origStereoPair; cv::Mat origLeft; cv::Mat origRight; cv::Mat rectLeft; cv::Mat rectRight; cv::Mat resizedLeftGray; cv::Mat resizedRightGray; cv::Mat resizedLeft; cv::Mat resizedRight; cv::Mat mdisparity; cv::Mat mdisparity_expanded; };