void SegmentationImpl::loadInputImageColor() { std::string fileName = inputSettings()->color(); cv::Mat input = loadImage(fileName); if (!input.empty()) { if (input.type() != CV_8UC3) { LERRORF("Expected type '8UC3' for color image, but got '%s'.", matTypeToStr(input.type()).c_str()); } else { // convert input image from 0 ... 255 to 0 ... 1 input.convertTo(inputImageColor_, CV_32FC3, 1/255.0f, 0); } } }
void SegmentationImpl::saveDepthImage(std::string filename, cv::Mat image, bool normalize) const { if (image.type() != CV_32FC1) { LERRORF("Expected type 'CV_32FC1' for depth image, but got '%s'.", matTypeToStr(image.type()).c_str()); } else { cv::Mat tmp; if (normalize) { cv::normalize(image, tmp, 0, 65535, cv::NORM_MINMAX, CV_16UC1); } else { float scale = inputSettings()->depthScale(); image.convertTo(tmp, CV_16UC1, scale, 0); } saveImage(filename, tmp); } }
void SegmentationImpl::loadInputImageGroundTruth() { std::string fileName = replaceString(inputSettings()->color(), inputSettings()->colorMatch(), inputSettings()->groundTruthReplace()); cv::Mat input = loadImage(fileName); if (!input.empty()) { switch (input.type()) { case CV_8UC1: inputImageGroundTruth_ = input; break; case CV_16UC1: input.convertTo(inputImageGroundTruth_, CV_8UC1, 1.0f, 0); break; default: LERRORF("Expected type CV_16UC1 or CV_16UC1 for ground truth image, but got '%s'.", matTypeToStr(input.type()).c_str()); } } }
void SegmentationImpl::loadInputImageDepth() { std::string fileName = replaceString(inputSettings()->color(), inputSettings()->colorMatch(), inputSettings()->depthReplace()); cv::Mat input = loadImage(fileName); if (!input.empty()) { const float scale = inputSettings()->depthScale(); switch (input.type()) { case CV_16UC1: input.convertTo(inputImageDepth_, CV_32FC1, 1/scale, 0); break; case CV_8UC1: input.convertTo(inputImageDepth_, CV_32FC1, 255/scale, 0); break; default: LERRORF("Expected type 'CV_16UC1' or 'CV_8UC1' for depth image, but got '%s'.", matTypeToStr(input.type()).c_str()); break; } } }
GLenum _CheckGLError(const char* file, int line, const char* function) { GLenum err = glGetError(); if (err != GL_NO_ERROR) { QString errStr; switch (err) { case GL_INVALID_ENUM: errStr = "openGL invalid enumerant"; break; case GL_INVALID_VALUE: errStr = "openGL invalid value"; break; case GL_INVALID_OPERATION: errStr = "openGL invalid operation"; break; case GL_INVALID_FRAMEBUFFER_OPERATION: errStr = "openGL invalid framebuffer operation"; break; case GL_STACK_OVERFLOW: errStr = "openGL stack overflow"; break; case GL_STACK_UNDERFLOW: errStr = "openGL stack underflow"; break; case GL_OUT_OF_MEMORY: errStr = "openGL out of memory"; break; default: errStr = "openGL unknown error"; break; } LERRORF(file, line, function) << errStr; } return err; }