diff --git a/inc/beamer.h b/inc/beamer.h index ab68548270ab845b2c550aee6cdb4838f045387a..e6141083ceee338730ed902a35913b8646e57cd1 100644 --- a/inc/beamer.h +++ b/inc/beamer.h @@ -5,28 +5,28 @@ #define ESCAPE_CHAR 27 -class Beamer -{ -private: - const char *BEAMER_POSITION_FILE = "./beamer.dat"; - cv::Point3f beamerPosition; - cv::Size resolution = cv::Size(256,144); +class Beamer{ + private: + const char *BEAMER_POSITION_FILE = "./beamer.dat"; + cv::Point3f beamerPosition; + cv::Size resolution = cv::Size(256,144); - cv::Point3f intersection(cv::Vec3f v1, cv::Point3f p1, cv::Vec3f v2, cv::Point3f p2, cv::Vec3f v3, cv::Point3f p3, bool &isFound); - std::vector<int> findCercleZ(cv::Mat &rgb); - cv::Point3d approximatePosition(std::vector<cv::Point3d> points1, std::vector<cv::Point3d> points2); + cv::Point3f intersection(cv::Vec3f v1, cv::Point3f p1, cv::Vec3f v2, cv::Point3f p2, cv::Vec3f v3, cv::Point3f p3, bool &isFound); + std::vector<int> findCercleZ(cv::Mat &rgb); + cv::Point3d approximatePosition(std::vector<cv::Point3d> points1, std::vector<cv::Point3d> points2); -public: - Beamer(); + public: + Beamer(); - cv::Point3f getPosition(){ return beamerPosition; }; - void setPosition(cv::Point3f pos){ beamerPosition = pos; }; - void setWidth(int w){ resolution.width = w; }; - int getWidth(){ return resolution.width; }; - void setHeight(int h){ resolution.height = h; }; - int getHeight(){ return resolution.height; }; + cv::Point3f getPosition(){ return beamerPosition; }; + void setPosition(cv::Point3f pos){ beamerPosition = pos; }; + void setWidth(int w){ resolution.width = w; }; + int getWidth(){ return resolution.width; }; + void setHeight(int h){ resolution.height = h; }; + int getHeight(){ return resolution.height; }; - int findBeamerFrom(Camera camera); - void printPosition(); + int findBeamerFrom(Camera camera); + void printPosition(); + }; #endif diff --git a/inc/beamerProjection.h b/inc/beamerProjection.h index bd28fd0520a5e95ec7e8555ae37270bbe0c404c5..18a019c54c2b0b0d19a2df7a189f9ae306e3b034 100644 --- a/inc/beamerProjection.h +++ b/inc/beamerProjection.h @@ -5,19 +5,22 @@ #include "beamer.h" #include "camera.h" -class BeamerProjection -{ -private: - const char *wndname = (char *)"Sandbox"; - cv::Mat adjustingMatrix; - cv::Point2i adjustPixel(int i, int j, float z, Camera camera, cv::Point3f beamer); +class BeamerProjection{ + private: + const char *wndname = (char *)"Sandbox"; + cv::Mat adjustingMatrix; + + cv::Point2i adjustPixel(int i, int j, float z, Camera camera, cv::Point3f beamer); + + public: + BeamerProjection(); + + void setAdjustingMatrix(cv::Mat matrix){ matrix.clone(); } + cv::Mat getAdjustingMatrix(){ return adjustingMatrix.clone(); } + + cv::Point2i rotatePixel(cv::Point2i pixel); + void adjustFrame(cv::Mat &depth, cv::Mat &src, cv::Mat &dst, Camera camera, cv::Point3f beamer); + void printAdjustingMatrix(); -public: - BeamerProjection(); - cv::Point2i rotatePixel(cv::Point2i pixel); - void adjustFrame(cv::Mat &depth, cv::Mat &src, cv::Mat &dst, Camera camera, cv::Point3f beamer); - void setAdjustingMatrix(cv::Mat matrix){ matrix.clone(); } - cv::Mat getAdjustingMatrix(){ return adjustingMatrix.clone(); } - void printAdjustingMatrix(); }; #endif \ No newline at end of file diff --git a/inc/camera.h b/inc/camera.h index 9c617e774d47198d3caea975f0cbac24e584daea..6f68e4c06654b0afe97eec9c82b8f3d620c395b7 100644 --- a/inc/camera.h +++ b/inc/camera.h @@ -5,13 +5,12 @@ #include <librealsense2/rsutil.h> #include <opencv2/opencv.hpp> -// camera definition : 640x480 +// camera resolution : 640x480 class Camera{ private: rs2::spatial_filter spatFilter; rs2::temporal_filter tempFilter; - rs2::decimation_filter decFilter; rs2::config cfg; rs2::pipeline pipe; rs2::pipeline_profile profile; @@ -21,16 +20,13 @@ class Camera{ cv::Mat matRGB; cv::Rect croppingMask; - void flipMat(cv::Mat &m); void filterDepthFrame(rs2::depth_frame &frameDepth); - cv::Mat captureFrame(); - cv::Mat getAverageFrame(int numberFrame); public: Camera(); - cv::Mat getDepthFrameAlign(){ return matDepth; }; - cv::Mat getRGBFrameAlign(){ return matRGB.clone(); }; + cv::Mat getDepthFrame(){ return matDepth; }; + cv::Mat getRGBFrame(){ return matRGB.clone(); }; void setCroppingMask(cv::Rect mask){ croppingMask = mask; }; cv::Rect getCroppingMask(){ return croppingMask; }; @@ -39,7 +35,7 @@ class Camera{ void stop(); cv::Point3f deprojectPixelToPoint(float coord[], float z1); cv::Point2i projectPointToPixel(cv::Point3f point3D); - void captureFramesAlign(); + void captureFrame(); void printCroppingMask(); }; diff --git a/inc/sandbox.h b/inc/sandbox.h index bf0a9074d559096af46c0cac751047ade7368c62..d77df2c3e13d3dde8dfd8c14e5b012df490e6042 100644 --- a/inc/sandbox.h +++ b/inc/sandbox.h @@ -24,7 +24,6 @@ class Sandbox{ cv::Mat getRGBFrame(); cv::Mat getDepthFrame(); - cv::Mat* adjustProjection(cv::Mat* frame); void showImage(cv::Mat* image); int loadConfig(); diff --git a/sandbox.h b/sandbox.h index bf0a9074d559096af46c0cac751047ade7368c62..d77df2c3e13d3dde8dfd8c14e5b012df490e6042 100644 --- a/sandbox.h +++ b/sandbox.h @@ -24,7 +24,6 @@ class Sandbox{ cv::Mat getRGBFrame(); cv::Mat getDepthFrame(); - cv::Mat* adjustProjection(cv::Mat* frame); void showImage(cv::Mat* image); int loadConfig(); diff --git a/src/components/beamer.cpp b/src/components/beamer.cpp index 0d8da8645990d3ca2abf8d9b1dfde4178827ad67..c1f6bdb68366f54fd321e60b33f3fa0c49233a16 100644 --- a/src/components/beamer.cpp +++ b/src/components/beamer.cpp @@ -44,9 +44,9 @@ int Beamer::findBeamerFrom(Camera camera) while (capturedPoints.size() < nbPoint){ // capture frame - camera.captureFramesAlign(); - depth = camera.getDepthFrameAlign(); - rgb = camera.getRGBFrameAlign(); + camera.captureFrame(); + depth = camera.getDepthFrame(); + rgb = camera.getRGBFrame(); // Look for the circle target std::vector<int> crc = findCercleZ(rgb); @@ -80,15 +80,10 @@ int Beamer::findBeamerFrom(Camera camera) frameImage.setTo(cv::Scalar(0, 0, 0)); } - // check for the end - if (capturedPoints.size() == nbPoint){ - - cv::Vec3f dir(capturedPoints[0].x - capturedPoints[1].x, capturedPoints[0].y - capturedPoints[1].y, capturedPoints[0].z - capturedPoints[1].z); - cv::Vec6f line; - cv::fitLine(capturedPoints, line, CV_DIST_L2, 0, 0.01, 0.01); - directions.push_back(cv::Point3d(line[3] * fact, line[4] * fact, line[5] * fact)); - bases.push_back(cv::Point3d(line[0], line[1], line[2])); - } + cv::Vec6f line; + cv::fitLine(capturedPoints, line, CV_DIST_L2, 0, 0.01, 0.01); + directions.push_back(cv::Point3d(line[3] * fact, line[4] * fact, line[5] * fact)); + bases.push_back(cv::Point3d(line[0], line[1], line[2])); } camera.stop(); @@ -208,7 +203,6 @@ std::vector<int> Beamer::findCercleZ(cv::Mat &rgb) cv::Point3d Beamer::approximatePosition(std::vector<cv::Point3d> directions, std::vector<cv::Point3d> bases){ - // Regression Linéaire cv::Point3d pa, pb; double mua; double mub; diff --git a/src/components/camera.cpp b/src/components/camera.cpp index d1772b0169a361550567b468fee36917c379ab06..dce1c6c5b38b59b836e7d22abf763d283f433541 100644 --- a/src/components/camera.cpp +++ b/src/components/camera.cpp @@ -13,8 +13,11 @@ Camera::Camera() { void Camera::start(){ - - rs2::log_to_console(RS2_LOG_SEVERITY_ERROR); + + std::remove("./camera.logs"); + rs2::log_to_file(RS2_LOG_SEVERITY_DEBUG, "./camera.logs"); + + //rs2::log_to_console(RS2_LOG_SEVERITY_DEBUG);//RS2_LOG_SEVERITY_ERROR); spatFilter.set_option(RS2_OPTION_HOLES_FILL, 5); //cfg.enable_device_from_file("../input/flux/flux5.bag"); profile = pipe.start(cfg); @@ -37,7 +40,6 @@ void Camera::warmingUp() { rs2::frameset data = pipe.wait_for_frames(); auto frameDepth = data.get_depth_frame(); - //frameDepth = decFilter.process(frameDepth); frameDepth = spatFilter.process(frameDepth); frameDepth = tempFilter.process(frameDepth); } @@ -49,7 +51,7 @@ void Camera::stop(){ } -void Camera::captureFramesAlign(){ +void Camera::captureFrame(){ rs2::align align(RS2_STREAM_DEPTH); auto frameset = pipe.wait_for_frames(); @@ -94,35 +96,9 @@ void Camera::printCroppingMask(){ */ -cv::Mat Camera::captureFrame(){ - - auto frame = pipe.wait_for_frames(); - auto frameDepth = frame.get_depth_frame(); - filterDepthFrame(frameDepth); - cv::Mat matFrame(cv::Size(frameDepth.get_width(), frameDepth.get_height()), CV_16UC1, (void *)frameDepth.get_data(), cv::Mat::AUTO_STEP); - return matFrame; -} - - void Camera::filterDepthFrame(rs2::depth_frame &frameDepth) { - // frameDepth = decFilter.process(frameDepth); frameDepth = spatFilter.process(frameDepth); frameDepth = tempFilter.process(frameDepth); intrinsics = frameDepth.get_profile().as<rs2::video_stream_profile>().get_intrinsics(); } - - -cv::Mat Camera::getAverageFrame(int numberFrame){ - - cv::Mat averageFrame; - Camera::captureFrame().copyTo(averageFrame); - for (int i = 1; i <= numberFrame; i++) - { - averageFrame *= i; - add(averageFrame, Camera::captureFrame(), averageFrame); - averageFrame /= i + 1; - } - return averageFrame; -} - diff --git a/src/lib/sandbox.cpp b/src/lib/sandbox.cpp index 334b3af16fb0ec01326d9658fe2680e12039168a..1c74a63a1bb25536ce76a5222b1091e750e6bde1 100644 --- a/src/lib/sandbox.cpp +++ b/src/lib/sandbox.cpp @@ -15,13 +15,13 @@ Sandbox::Sandbox(){ */ cv::Mat Sandbox::getRGBFrame(){ - camera.captureFramesAlign(); - return camera.getRGBFrameAlign()(camera.getCroppingMask()); + camera.captureFrame(); + return camera.getRGBFrame()(camera.getCroppingMask()); } cv::Mat Sandbox::getDepthFrame(){ - camera.captureFramesAlign(); - return camera.getDepthFrameAlign()(camera.getCroppingMask()); + camera.captureFrame(); + return camera.getDepthFrame()(camera.getCroppingMask()); } diff --git a/src/lib/sandboxSetup.cpp b/src/lib/sandboxSetup.cpp index f2d60b6045e601ab91c37938107df4b515c81ae9..d77d1493c772930e31b04db556658aad8478530a 100644 --- a/src/lib/sandboxSetup.cpp +++ b/src/lib/sandboxSetup.cpp @@ -33,12 +33,12 @@ int SandboxSetup::setupBeamerResolution(){ int width = 0; int height = 0; - std::cout << "Enter width of the beamer's resolution :" << std::endl; + std::cout << "Enter width of the frame projected :" << std::endl; std::cin >> width; if(std::cin.fail()){ return 1; } - std::cout << "Enter height of the beamer's resolution :" << std::endl; + std::cout << "Enter height of the frame projected :" << std::endl; std::cin >> height; if(std::cin.fail()){ return 1; @@ -69,9 +69,9 @@ int SandboxSetup::setupProjection(){ // Take picture camera.start(); // 1 seconde of warming up - camera.captureFramesAlign(); - cv::Mat frameData = camera.getDepthFrameAlign(); - cv::Mat coloredFrame = camera.getRGBFrameAlign(); + camera.captureFrame(); + cv::Mat frameData = camera.getDepthFrame(); + cv::Mat coloredFrame = camera.getRGBFrame(); cv::Size s = frameData.size(); cv::Point center(s.width / 2, s.height / 2); camera.stop();