44 #ifndef BSFM_IMAGE_IMAGE_H
45 #define BSFM_IMAGE_IMAGE_H
50 #include <Eigen/Dense>
51 #include <glog/logging.h>
52 #include <opencv2/core/core.hpp>
53 #include <opencv2/core/eigen.hpp>
54 #include <opencv2/highgui/highgui.hpp>
55 #include <opencv2/imgproc/imgproc.hpp>
59 using Eigen::MatrixXd;
60 using Eigen::MatrixXf;
64 typedef std::shared_ptr<Image>
Ptr;
74 Image(
size_t width,
size_t height,
size_t channels);
77 explicit Image(
const std::string& filename,
bool grayscale =
false);
80 explicit Image(
const cv::Mat& other);
84 inline T&
at(
size_t u,
size_t v);
87 const inline T&
at(
size_t u,
size_t v)
const;
90 void ToCV(cv::Mat& out)
const;
91 void FromCV(
const cv::Mat& in);
94 void ToEigen(MatrixXf& eigen_out);
97 void Read(
const std::string& filename,
bool grayscale =
false);
98 void Write(
const std::string& filename)
const;
101 size_t Width()
const;
109 void Resize(
double scale);
110 void Resize(
size_t new_width,
size_t new_height);
124 void ImShow(
const std::string& window_name = std::string(),
125 unsigned int wait_time = 0);
133 template <
typename T>
135 const cv::Mat& cv_mat,
136 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& eigen_mat);
139 template <
typename T>
141 const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& eigen_mat,
146 template <
typename T>
148 CHECK_NOTNULL(
image_.get());
149 return image_->template at<T>(u, v);
152 template <
typename T>
154 CHECK_NOTNULL(
image_.get());
155 return image_->template at<T>(u, v);
159 template <
typename T>
161 const cv::Mat& cv_mat,
162 Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& eigen_mat) {
164 if (cv_mat.channels() != 1) {
165 cv::Mat grayscale_mat;
166 cv::cvtColor(cv_mat, grayscale_mat, CV_RGB2GRAY);
167 cv::cv2eigen(grayscale_mat, eigen_mat);
169 cv::cv2eigen(cv_mat, eigen_mat);
174 template <
typename T>
176 const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& eigen_mat,
178 cv::eigen2cv(eigen_mat, cv_mat);
std::shared_ptr< cv::Mat > image_
std::shared_ptr< const Image > ConstPtr
void RotateCounterClockwise()
void Write(const std::string &filename) const
std::shared_ptr< Image > Ptr
void FromCV(const cv::Mat &in)
void Resize(double scale)
void ToEigen(MatrixXf &eigen_out)
void Read(const std::string &filename, bool grayscale=false)
void ConvertToGrayscale()
T & at(size_t u, size_t v)
void EigenMatToOpenCV(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &eigen_mat, cv::Mat &cv_mat)
void OpenCVToEigenMat(const cv::Mat &cv_mat, Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &eigen_mat)
void ImShow(const std::string &window_name=std::string(), unsigned int wait_time=0)
void ToCV(cv::Mat &out) const