Newer
Older
/**
* @file voltu_cv.cpp
* @copyright Copyright (c) 2020 Nicolas Pope, MIT License
* @author Nicolas Pope
*/
#include <opencv2/imgproc.hpp>
void voltu::cv::convert(voltu::ImagePtr img, ::cv::Mat &mat)
{
voltu::ImageData data = img->getHost();
if (data.format == voltu::ImageFormat::kBGRA8)
{
mat = ::cv::Mat(data.height, data.width, CV_8UC4, data.data);
}
else if (data.format == voltu::ImageFormat::kFloat32)
{
mat = ::cv::Mat(data.height, data.width, CV_32FC1, data.data);
}
else if (data.format == voltu::ImageFormat::kFloat16_4)
{
mat = ::cv::Mat(data.height, data.width, CV_16FC4, data.data);
}
else
{
mat = ::cv::Mat();
}
}
void voltu::cv::convert(voltu::ImagePtr img, ::cv::cuda::GpuMat &mat)
{
}
void voltu::cv::visualise(voltu::ImagePtr img, ::cv::Mat &mat)
{
voltu::ImageData data = img->getHost();
if (data.format == voltu::ImageFormat::kBGRA8)
{
voltu::cv::convert(img, mat);
}
else if (data.format == voltu::ImageFormat::kFloat32)
{
::cv::Mat tmp;
voltu::cv::convert(img, tmp);
float maxdepth = 8.0f; // TODO: Get from intrinsics
//::cv::normalize(tmp, tmp, 0, 255, ::cv::NORM_MINMAX);
tmp.convertTo(tmp, CV_8U, 255.0f / maxdepth);
::cv::Mat mask = tmp > 0;
::cv::subtract(::cv::Scalar(255), tmp, tmp, mask);
//#if OPENCV_VERSION >= 40102
//cv::applyColorMap(tmp, mat, cv::COLORMAP_TURBO);
//#else
::cv::applyColorMap(tmp, mat, ::cv::COLORMAP_INFERNO);
//#endif
}
else if (data.format == voltu::ImageFormat::kFloat16_4)
{
::cv::Mat tmp;
voltu::cv::convert(img, tmp);
tmp.convertTo(tmp, CV_32FC4);
tmp += 1.0f;
tmp *= 127.0f;
tmp.convertTo(mat, CV_8UC4);
}