- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List
- File Members

# /usr/obj/OpenCV-2.2.0/OpenCV-2.2.0/modules/core/include/opencv2/core/eigen.hpp

Go to the documentation of this file.

    00001 /*M///////////////////////////////////////////////////////////////////////////////////////
    00002 //
    00003 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
    00004 //
    00005 //  By downloading, copying, installing or using the software you agree to this license.
    00006 //  If you do not agree to this license, do not download, install,
    00007 //  copy or use the software.
    00008 //
    00009 //
    00010 //                          License Agreement
    00011 //                For Open Source Computer Vision Library
    00012 //
    00013 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
    00014 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
    00015 // Third party copyrights are property of their respective owners.
    00016 //
    00017 // Redistribution and use in source and binary forms, with or without modification,
    00018 // are permitted provided that the following conditions are met:
    00019 //
    00020 //   * Redistribution's of source code must retain the above copyright notice,
    00021 //     this list of conditions and the following disclaimer.
    00022 //
    00023 //   * Redistribution's in binary form must reproduce the above copyright notice,
    00024 //     this list of conditions and the following disclaimer in the documentation
    00025 //     and/or other materials provided with the distribution.
    00026 //
    00027 //   * The name of the copyright holders may not be used to endorse or promote products
    00028 //     derived from this software without specific prior written permission.
    00029 //
    00030 // This software is provided by the copyright holders and contributors "as is" and
    00031 // any express or implied warranties, including, but not limited to, the implied
    00032 // warranties of merchantability and fitness for a particular purpose are disclaimed.
    00033 // In no event shall the Intel Corporation or contributors be liable for any direct,
    00034 // indirect, incidental, special, exemplary, or consequential damages
    00035 // (including, but not limited to, procurement of substitute goods or services;
    00036 // loss of use, data, or profits; or business interruption) however caused
    00037 // and on any theory of liability, whether in contract, strict liability,
    00038 // or tort (including negligence or otherwise) arising in any way out of
    00039 // the use of this software, even if advised of the possibility of such damage.
    00040 //
    00041 //M*/
    00042
    00043 #ifndef __OPENCV_CORE_EIGEN_HPP__
    00044 #define __OPENCV_CORE_EIGEN_HPP__
    00045
    00046 #ifdef __cplusplus
    00047
    00048 #include "cxcore.h"
    00049
    00050 namespace cv
    00051 {
    00052
    00053 template<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols>
    00054 void eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src, Mat& dst )
    00055 {
    00056     if( !(src.Flags & Eigen::RowMajorBit) )
    00057     {
    00058         Mat _src(src.cols(), src.rows(), DataType<_Tp>::type,
    00059               (void*)src.data(), src.stride()*sizeof(_Tp));
    00060         transpose(_src, dst);
    00061     }
    00062     else
    00063     {
    00064         Mat _src(src.rows(), src.cols(), DataType<_Tp>::type,
    00065                  (void*)src.data(), src.stride()*sizeof(_Tp));
    00066         _src.copyTo(dst);
    00067     }
    00068 }
    00069
    00070 template<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols>
    00071 void cv2eigen( const Mat& src,
    00072                Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst )
    00073 {
    00074     CV_DbgAssert(src.rows == _rows && src.cols == _cols);
    00075     if( !(dst.Flags & Eigen::RowMajorBit) )
    00076     {
    00077         Mat _dst(src.cols, src.rows, DataType<_Tp>::type,
    00078                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));
    00079         if( src.type() == _dst.type() )
    00080             transpose(src, _dst);
    00081         else if( src.cols == src.rows )
    00082         {
    00083             src.convertTo(_dst, _dst.type());
    00084             transpose(_dst, _dst);
    00085         }
    00086         else
    00087             Mat(src.t()).convertTo(_dst, _dst.type());
    00088         CV_DbgAssert(_dst.data == (uchar*)dst.data());
    00089     }
    00090     else
    00091     {
    00092         Mat _dst(src.rows, src.cols, DataType<_Tp>::type,
    00093                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));
    00094         src.convertTo(_dst, _dst.type());
    00095         CV_DbgAssert(_dst.data == (uchar*)dst.data());
    00096     }
    00097 }
    00098
    00099 template<typename _Tp>
    00100 void cv2eigen( const Mat& src,
    00101                Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst )
    00102 {
    00103     dst.resize(src.rows, src.cols);
    00104     if( !(dst.Flags & Eigen::RowMajorBit) )
    00105     {
    00106         Mat _dst(src.cols, src.rows, DataType<_Tp>::type,
    00107              dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));
    00108         if( src.type() == _dst.type() )
    00109             transpose(src, _dst);
    00110         else if( src.cols == src.rows )
    00111         {
    00112             src.convertTo(_dst, _dst.type());
    00113             transpose(_dst, _dst);
    00114         }
    00115         else
    00116             Mat(src.t()).convertTo(_dst, _dst.type());
    00117         CV_DbgAssert(_dst.data == (uchar*)dst.data());
    00118     }
    00119     else
    00120     {
    00121         Mat _dst(src.rows, src.cols, DataType<_Tp>::type,
    00122                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));
    00123         src.convertTo(_dst, _dst.type());
    00124         CV_DbgAssert(_dst.data == (uchar*)dst.data());
    00125     }
    00126 }
    00127
    00128
    00129 template<typename _Tp>
    00130 void cv2eigen( const Mat& src,
    00131                Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst )
    00132 {
    00133     CV_Assert(src.cols == 1);
    00134     dst.resize(src.rows);
    00135
    00136     if( !(dst.Flags & Eigen::RowMajorBit) )
    00137     {
    00138         Mat _dst(src.cols, src.rows, DataType<_Tp>::type,
    00139                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));
    00140         if( src.type() == _dst.type() )
    00141             transpose(src, _dst);
    00142         else
    00143             Mat(src.t()).convertTo(_dst, _dst.type());
    00144         CV_DbgAssert(_dst.data == (uchar*)dst.data());
    00145     }
    00146     else
    00147     {
    00148         Mat _dst(src.rows, src.cols, DataType<_Tp>::type,
    00149                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));
    00150         src.convertTo(_dst, _dst.type());
    00151         CV_DbgAssert(_dst.data == (uchar*)dst.data());
    00152     }
    00153 }
    00154
    00155
    00156 template<typename _Tp>
    00157 void cv2eigen( const Mat& src,
    00158                Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst )
    00159 {
    00160     CV_Assert(src.rows == 1);
    00161     dst.resize(src.cols);
    00162     if( !(dst.Flags & Eigen::RowMajorBit) )
    00163     {
    00164         Mat _dst(src.cols, src.rows, DataType<_Tp>::type,
    00165                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));
    00166         if( src.type() == _dst.type() )
    00167             transpose(src, _dst);
    00168         else
    00169             Mat(src.t()).convertTo(_dst, _dst.type());
    00170         CV_DbgAssert(_dst.data == (uchar*)dst.data());
    00171     }
    00172     else
    00173     {
    00174         Mat _dst(src.rows, src.cols, DataType<_Tp>::type,
    00175                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp)));
    00176         src.convertTo(_dst, _dst.type());
    00177         CV_DbgAssert(_dst.data == (uchar*)dst.data());
    00178     }
    00179 }
    00180
    00181 }
    00182
    00183 #endif
    00184
    00185 #endif
    00186

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines