Remove opencv from phonelibs (#2107)
	
		
	
				
					
				
			* remove opencv from phonelibs * clean that up toopull/2121/head
							parent
							
								
									4569e51b3e
								
							
						
					
					
						commit
						63436373d2
					
				
				 25 changed files with 1 additions and 24458 deletions
			
			
		| @ -1,515 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                          License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Copyright (C) 2013, OpenCV Foundation, all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_CORE_AFFINE3_HPP__ | ||||
| #define __OPENCV_CORE_AFFINE3_HPP__ | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| #include <opencv2/core/core.hpp> | ||||
| 
 | ||||
| /*! @file */ | ||||
| 
 | ||||
| namespace cv | ||||
| { | ||||
|     template<typename T> | ||||
|     class Affine3 | ||||
|     { | ||||
|     public: | ||||
|         typedef T float_type; | ||||
|         typedef Matx<float_type, 3, 3> Mat3; | ||||
|         typedef Matx<float_type, 4, 4> Mat4; | ||||
|         typedef Vec<float_type, 3> Vec3; | ||||
| 
 | ||||
|         Affine3(); | ||||
| 
 | ||||
|         //Augmented affine matrix
 | ||||
|         Affine3(const Mat4& affine); | ||||
| 
 | ||||
|         //Rotation matrix
 | ||||
|         Affine3(const Mat3& R, const Vec3& t = Vec3::all(0)); | ||||
| 
 | ||||
|         //Rodrigues vector
 | ||||
|         Affine3(const Vec3& rvec, const Vec3& t = Vec3::all(0)); | ||||
| 
 | ||||
|         //Combines all contructors above. Supports 4x4, 4x3, 3x3, 1x3, 3x1 sizes of data matrix
 | ||||
|         explicit Affine3(const Mat& data, const Vec3& t = Vec3::all(0)); | ||||
| 
 | ||||
|         //From 16th element array
 | ||||
|         explicit Affine3(const float_type* vals); | ||||
| 
 | ||||
|         static Affine3 Identity(); | ||||
| 
 | ||||
|         //Rotation matrix
 | ||||
|         void rotation(const Mat3& R); | ||||
| 
 | ||||
|         //Rodrigues vector
 | ||||
|         void rotation(const Vec3& rvec); | ||||
| 
 | ||||
|         //Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix;
 | ||||
|         void rotation(const Mat& data); | ||||
| 
 | ||||
|         void linear(const Mat3& L); | ||||
|         void translation(const Vec3& t); | ||||
| 
 | ||||
|         Mat3 rotation() const; | ||||
|         Mat3 linear() const; | ||||
|         Vec3 translation() const; | ||||
| 
 | ||||
|         //Rodrigues vector
 | ||||
|         Vec3 rvec() const; | ||||
| 
 | ||||
|         Affine3 inv(int method = cv::DECOMP_SVD) const; | ||||
| 
 | ||||
|         // a.rotate(R) is equivalent to Affine(R, 0) * a;
 | ||||
|         Affine3 rotate(const Mat3& R) const; | ||||
| 
 | ||||
|         // a.rotate(R) is equivalent to Affine(rvec, 0) * a;
 | ||||
|         Affine3 rotate(const Vec3& rvec) const; | ||||
| 
 | ||||
|         // a.translate(t) is equivalent to Affine(E, t) * a;
 | ||||
|         Affine3 translate(const Vec3& t) const; | ||||
| 
 | ||||
|         // a.concatenate(affine) is equivalent to affine * a;
 | ||||
|         Affine3 concatenate(const Affine3& affine) const; | ||||
| 
 | ||||
|         template <typename Y> operator Affine3<Y>() const; | ||||
| 
 | ||||
|         template <typename Y> Affine3<Y> cast() const; | ||||
| 
 | ||||
|         Mat4 matrix; | ||||
| 
 | ||||
| #if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H | ||||
|         Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine); | ||||
|         Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine); | ||||
|         operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const; | ||||
|         operator Eigen::Transform<T, 3, Eigen::Affine>() const; | ||||
| #endif | ||||
|     }; | ||||
| 
 | ||||
|     template<typename T> static | ||||
|     Affine3<T> operator*(const Affine3<T>& affine1, const Affine3<T>& affine2); | ||||
| 
 | ||||
|     template<typename T, typename V> static | ||||
|     V operator*(const Affine3<T>& affine, const V& vector); | ||||
| 
 | ||||
|     typedef Affine3<float> Affine3f; | ||||
|     typedef Affine3<double> Affine3d; | ||||
| 
 | ||||
|     static Vec3f operator*(const Affine3f& affine, const Vec3f& vector); | ||||
|     static Vec3d operator*(const Affine3d& affine, const Vec3d& vector); | ||||
| 
 | ||||
|     template<typename _Tp> class DataType< Affine3<_Tp> > | ||||
|     { | ||||
|     public: | ||||
|         typedef Affine3<_Tp>                               value_type; | ||||
|         typedef Affine3<typename DataType<_Tp>::work_type> work_type; | ||||
|         typedef _Tp                                        channel_type; | ||||
| 
 | ||||
|         enum { generic_type = 0, | ||||
|                depth        = DataType<channel_type>::depth, | ||||
|                channels     = 16, | ||||
|                fmt          = DataType<channel_type>::fmt + ((channels - 1) << 8), | ||||
|                type         = CV_MAKETYPE(depth, channels) | ||||
|              }; | ||||
| 
 | ||||
|         typedef Vec<channel_type, channels> vec_type; | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| ///////////////////////////////////////////////////////////////////////////////////
 | ||||
| /// Implementaiton
 | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::Affine3() | ||||
|     : matrix(Mat4::eye()) | ||||
| {} | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::Affine3(const Mat4& affine) | ||||
|     : matrix(affine) | ||||
| {} | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::Affine3(const Mat3& R, const Vec3& t) | ||||
| { | ||||
|     rotation(R); | ||||
|     translation(t); | ||||
|     matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; | ||||
|     matrix.val[15] = 1; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::Affine3(const Vec3& _rvec, const Vec3& t) | ||||
| { | ||||
|     rotation(_rvec); | ||||
|     translation(t); | ||||
|     matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; | ||||
|     matrix.val[15] = 1; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::Affine3(const cv::Mat& data, const Vec3& t) | ||||
| { | ||||
|     CV_Assert(data.type() == cv::DataType<T>::type); | ||||
| 
 | ||||
|     if (data.cols == 4 && data.rows == 4) | ||||
|     { | ||||
|         data.copyTo(matrix); | ||||
|         return; | ||||
|     } | ||||
|     else if (data.cols == 4 && data.rows == 3) | ||||
|     { | ||||
|         rotation(data(Rect(0, 0, 3, 3))); | ||||
|         translation(data(Rect(3, 0, 1, 3))); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         rotation(data); | ||||
|         translation(t); | ||||
|     } | ||||
| 
 | ||||
|     matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; | ||||
|     matrix.val[15] = 1; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::Affine3(const float_type* vals) : matrix(vals) | ||||
| {} | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T> cv::Affine3<T>::Identity() | ||||
| { | ||||
|     return Affine3<T>(cv::Affine3<T>::Mat4::eye()); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| void cv::Affine3<T>::rotation(const Mat3& R) | ||||
| { | ||||
|     linear(R); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| void cv::Affine3<T>::rotation(const Vec3& _rvec) | ||||
| { | ||||
|     double rx = _rvec[0], ry = _rvec[1], rz = _rvec[2]; | ||||
|     double theta = std::sqrt(rx*rx + ry*ry + rz*rz); | ||||
| 
 | ||||
|     if (theta < DBL_EPSILON) | ||||
|         rotation(Mat3::eye()); | ||||
|     else | ||||
|     { | ||||
|         const double I[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; | ||||
| 
 | ||||
|         double c = std::cos(theta); | ||||
|         double s = std::sin(theta); | ||||
|         double c1 = 1. - c; | ||||
|         double itheta = (theta != 0) ? 1./theta : 0.; | ||||
| 
 | ||||
|         rx *= itheta; ry *= itheta; rz *= itheta; | ||||
| 
 | ||||
|         double rrt[] = { rx*rx, rx*ry, rx*rz, rx*ry, ry*ry, ry*rz, rx*rz, ry*rz, rz*rz }; | ||||
|         double _r_x_[] = { 0, -rz, ry, rz, 0, -rx, -ry, rx, 0 }; | ||||
|         Mat3 R; | ||||
| 
 | ||||
|         // R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x]
 | ||||
|         // where [r_x] is [0 -rz ry; rz 0 -rx; -ry rx 0]
 | ||||
|         for(int k = 0; k < 9; ++k) | ||||
|             R.val[k] = static_cast<float_type>(c*I[k] + c1*rrt[k] + s*_r_x_[k]); | ||||
| 
 | ||||
|         rotation(R); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| //Combines rotation methods above. Suports 3x3, 1x3, 3x1 sizes of data matrix;
 | ||||
| template<typename T> inline | ||||
| void cv::Affine3<T>::rotation(const cv::Mat& data) | ||||
| { | ||||
|     CV_Assert(data.type() == cv::DataType<T>::type); | ||||
| 
 | ||||
|     if (data.cols == 3 && data.rows == 3) | ||||
|     { | ||||
|         Mat3 R; | ||||
|         data.copyTo(R); | ||||
|         rotation(R); | ||||
|     } | ||||
|     else if ((data.cols == 3 && data.rows == 1) || (data.cols == 1 && data.rows == 3)) | ||||
|     { | ||||
|         Vec3 _rvec; | ||||
|         data.reshape(1, 3).copyTo(_rvec); | ||||
|         rotation(_rvec); | ||||
|     } | ||||
|     else | ||||
|         CV_Assert(!"Input marix can be 3x3, 1x3 or 3x1"); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| void cv::Affine3<T>::linear(const Mat3& L) | ||||
| { | ||||
|     matrix.val[0] = L.val[0]; matrix.val[1] = L.val[1];  matrix.val[ 2] = L.val[2]; | ||||
|     matrix.val[4] = L.val[3]; matrix.val[5] = L.val[4];  matrix.val[ 6] = L.val[5]; | ||||
|     matrix.val[8] = L.val[6]; matrix.val[9] = L.val[7];  matrix.val[10] = L.val[8]; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| void cv::Affine3<T>::translation(const Vec3& t) | ||||
| { | ||||
|     matrix.val[3] = t[0]; matrix.val[7] = t[1]; matrix.val[11] = t[2]; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| typename cv::Affine3<T>::Mat3 cv::Affine3<T>::rotation() const | ||||
| { | ||||
|     return linear(); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| typename cv::Affine3<T>::Mat3 cv::Affine3<T>::linear() const | ||||
| { | ||||
|     typename cv::Affine3<T>::Mat3 R; | ||||
|     R.val[0] = matrix.val[0];  R.val[1] = matrix.val[1];  R.val[2] = matrix.val[ 2]; | ||||
|     R.val[3] = matrix.val[4];  R.val[4] = matrix.val[5];  R.val[5] = matrix.val[ 6]; | ||||
|     R.val[6] = matrix.val[8];  R.val[7] = matrix.val[9];  R.val[8] = matrix.val[10]; | ||||
|     return R; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| typename cv::Affine3<T>::Vec3 cv::Affine3<T>::translation() const | ||||
| { | ||||
|     return Vec3(matrix.val[3], matrix.val[7], matrix.val[11]); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| typename cv::Affine3<T>::Vec3 cv::Affine3<T>::rvec() const | ||||
| { | ||||
|     cv::Vec3d w; | ||||
|     cv::Matx33d u, vt, R = rotation(); | ||||
|     cv::SVD::compute(R, w, u, vt, cv::SVD::FULL_UV + cv::SVD::MODIFY_A); | ||||
|     R = u * vt; | ||||
| 
 | ||||
|     double rx = R.val[7] - R.val[5]; | ||||
|     double ry = R.val[2] - R.val[6]; | ||||
|     double rz = R.val[3] - R.val[1]; | ||||
| 
 | ||||
|     double s = std::sqrt((rx*rx + ry*ry + rz*rz)*0.25); | ||||
|     double c = (R.val[0] + R.val[4] + R.val[8] - 1) * 0.5; | ||||
|     c = c > 1.0 ? 1.0 : c < -1.0 ? -1.0 : c; | ||||
|     double theta = acos(c); | ||||
| 
 | ||||
|     if( s < 1e-5 ) | ||||
|     { | ||||
|         if( c > 0 ) | ||||
|             rx = ry = rz = 0; | ||||
|         else | ||||
|         { | ||||
|             double t; | ||||
|             t = (R.val[0] + 1) * 0.5; | ||||
|             rx = std::sqrt(std::max(t, 0.0)); | ||||
|             t = (R.val[4] + 1) * 0.5; | ||||
|             ry = std::sqrt(std::max(t, 0.0)) * (R.val[1] < 0 ? -1.0 : 1.0); | ||||
|             t = (R.val[8] + 1) * 0.5; | ||||
|             rz = std::sqrt(std::max(t, 0.0)) * (R.val[2] < 0 ? -1.0 : 1.0); | ||||
| 
 | ||||
|             if( fabs(rx) < fabs(ry) && fabs(rx) < fabs(rz) && (R.val[5] > 0) != (ry*rz > 0) ) | ||||
|                 rz = -rz; | ||||
|             theta /= std::sqrt(rx*rx + ry*ry + rz*rz); | ||||
|             rx *= theta; | ||||
|             ry *= theta; | ||||
|             rz *= theta; | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         double vth = 1/(2*s); | ||||
|         vth *= theta; | ||||
|         rx *= vth; ry *= vth; rz *= vth; | ||||
|     } | ||||
| 
 | ||||
|     return cv::Vec3d(rx, ry, rz); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T> cv::Affine3<T>::inv(int method) const | ||||
| { | ||||
|     return matrix.inv(method); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T> cv::Affine3<T>::rotate(const Mat3& R) const | ||||
| { | ||||
|     Mat3 Lc = linear(); | ||||
|     Vec3 tc = translation(); | ||||
|     Mat4 result; | ||||
|     result.val[12] = result.val[13] = result.val[14] = 0; | ||||
|     result.val[15] = 1; | ||||
| 
 | ||||
|     for(int j = 0; j < 3; ++j) | ||||
|     { | ||||
|         for(int i = 0; i < 3; ++i) | ||||
|         { | ||||
|             float_type value = 0; | ||||
|             for(int k = 0; k < 3; ++k) | ||||
|                 value += R(j, k) * Lc(k, i); | ||||
|             result(j, i) = value; | ||||
|         } | ||||
| 
 | ||||
|         result(j, 3) = R.row(j).dot(tc.t()); | ||||
|     } | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T> cv::Affine3<T>::rotate(const Vec3& _rvec) const | ||||
| { | ||||
|     return rotate(Affine3f(_rvec).rotation()); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T> cv::Affine3<T>::translate(const Vec3& t) const | ||||
| { | ||||
|     Mat4 m = matrix; | ||||
|     m.val[ 3] += t[0]; | ||||
|     m.val[ 7] += t[1]; | ||||
|     m.val[11] += t[2]; | ||||
|     return m; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T> cv::Affine3<T>::concatenate(const Affine3<T>& affine) const | ||||
| { | ||||
|     return (*this).rotate(affine.rotation()).translate(affine.translation()); | ||||
| } | ||||
| 
 | ||||
| template<typename T> template <typename Y> inline | ||||
| cv::Affine3<T>::operator Affine3<Y>() const | ||||
| { | ||||
|     return Affine3<Y>(matrix); | ||||
| } | ||||
| 
 | ||||
| template<typename T> template <typename Y> inline | ||||
| cv::Affine3<Y> cv::Affine3<T>::cast() const | ||||
| { | ||||
|     return Affine3<Y>(matrix); | ||||
| } | ||||
| 
 | ||||
| /** @cond IGNORED */ | ||||
| template<typename T> inline | ||||
| cv::Affine3<T> cv::operator*(const cv::Affine3<T>& affine1, const cv::Affine3<T>& affine2) | ||||
| { | ||||
|     return affine2.concatenate(affine1); | ||||
| } | ||||
| 
 | ||||
| template<typename T, typename V> inline | ||||
| V cv::operator*(const cv::Affine3<T>& affine, const V& v) | ||||
| { | ||||
|     const typename Affine3<T>::Mat4& m = affine.matrix; | ||||
| 
 | ||||
|     V r; | ||||
|     r.x = m.val[0] * v.x + m.val[1] * v.y + m.val[ 2] * v.z + m.val[ 3]; | ||||
|     r.y = m.val[4] * v.x + m.val[5] * v.y + m.val[ 6] * v.z + m.val[ 7]; | ||||
|     r.z = m.val[8] * v.x + m.val[9] * v.y + m.val[10] * v.z + m.val[11]; | ||||
|     return r; | ||||
| } | ||||
| /** @endcond */ | ||||
| 
 | ||||
| static inline | ||||
| cv::Vec3f cv::operator*(const cv::Affine3f& affine, const cv::Vec3f& v) | ||||
| { | ||||
|     const cv::Matx44f& m = affine.matrix; | ||||
|     cv::Vec3f r; | ||||
|     r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3]; | ||||
|     r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7]; | ||||
|     r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11]; | ||||
|     return r; | ||||
| } | ||||
| 
 | ||||
| static inline | ||||
| cv::Vec3d cv::operator*(const cv::Affine3d& affine, const cv::Vec3d& v) | ||||
| { | ||||
|     const cv::Matx44d& m = affine.matrix; | ||||
|     cv::Vec3d r; | ||||
|     r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[ 2] * v[2] + m.val[ 3]; | ||||
|     r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[ 6] * v[2] + m.val[ 7]; | ||||
|     r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11]; | ||||
|     return r; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>& affine) | ||||
| { | ||||
|     cv::Mat(4, 4, cv::DataType<T>::type, affine.matrix().data()).copyTo(matrix); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::Affine3(const Eigen::Transform<T, 3, Eigen::Affine>& affine) | ||||
| { | ||||
|     Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> a = affine; | ||||
|     cv::Mat(4, 4, cv::DataType<T>::type, a.matrix().data()).copyTo(matrix); | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>() const | ||||
| { | ||||
|     Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)> r; | ||||
|     cv::Mat hdr(4, 4, cv::DataType<T>::type, r.matrix().data()); | ||||
|     cv::Mat(matrix, false).copyTo(hdr); | ||||
|     return r; | ||||
| } | ||||
| 
 | ||||
| template<typename T> inline | ||||
| cv::Affine3<T>::operator Eigen::Transform<T, 3, Eigen::Affine>() const | ||||
| { | ||||
|     return this->operator Eigen::Transform<T, 3, Eigen::Affine, (Eigen::RowMajor)>(); | ||||
| } | ||||
| 
 | ||||
| #endif /* defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H */ | ||||
| 
 | ||||
| 
 | ||||
| #endif /* __cplusplus */ | ||||
| 
 | ||||
| #endif /* __OPENCV_CORE_AFFINE3_HPP__ */ | ||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -1,194 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_CORE_DEVPTRS_HPP__ | ||||
| #define __OPENCV_CORE_DEVPTRS_HPP__ | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| #ifdef __CUDACC__ | ||||
|     #define __CV_GPU_HOST_DEVICE__ __host__ __device__ __forceinline__ | ||||
| #else | ||||
|     #define __CV_GPU_HOST_DEVICE__ | ||||
| #endif | ||||
| 
 | ||||
| namespace cv | ||||
| { | ||||
|     namespace gpu | ||||
|     { | ||||
|         // Simple lightweight structures that encapsulates information about an image on device.
 | ||||
|         // It is intended to pass to nvcc-compiled code. GpuMat depends on headers that nvcc can't compile
 | ||||
| 
 | ||||
|         template <bool expr> struct StaticAssert; | ||||
|         template <> struct StaticAssert<true> {static __CV_GPU_HOST_DEVICE__ void check(){}}; | ||||
| 
 | ||||
|         template<typename T> struct DevPtr | ||||
|         { | ||||
|             typedef T elem_type; | ||||
|             typedef int index_type; | ||||
| 
 | ||||
|             enum { elem_size = sizeof(elem_type) }; | ||||
| 
 | ||||
|             T* data; | ||||
| 
 | ||||
|             __CV_GPU_HOST_DEVICE__ DevPtr() : data(0) {} | ||||
|             __CV_GPU_HOST_DEVICE__ DevPtr(T* data_) : data(data_) {} | ||||
| 
 | ||||
|             __CV_GPU_HOST_DEVICE__ size_t elemSize() const { return elem_size; } | ||||
|             __CV_GPU_HOST_DEVICE__ operator       T*()       { return data; } | ||||
|             __CV_GPU_HOST_DEVICE__ operator const T*() const { return data; } | ||||
|         }; | ||||
| 
 | ||||
|         template<typename T> struct PtrSz : public DevPtr<T> | ||||
|         { | ||||
|             __CV_GPU_HOST_DEVICE__ PtrSz() : size(0) {} | ||||
|             __CV_GPU_HOST_DEVICE__ PtrSz(T* data_, size_t size_) : DevPtr<T>(data_), size(size_) {} | ||||
| 
 | ||||
|             size_t size; | ||||
|         }; | ||||
| 
 | ||||
|         template<typename T> struct PtrStep : public DevPtr<T> | ||||
|         { | ||||
|             __CV_GPU_HOST_DEVICE__ PtrStep() : step(0) {} | ||||
|             __CV_GPU_HOST_DEVICE__ PtrStep(T* data_, size_t step_) : DevPtr<T>(data_), step(step_) {} | ||||
| 
 | ||||
|             /** \brief stride between two consecutive rows in bytes. Step is stored always and everywhere in bytes!!! */ | ||||
|             size_t step; | ||||
| 
 | ||||
|             __CV_GPU_HOST_DEVICE__       T* ptr(int y = 0)       { return (      T*)( (      char*)DevPtr<T>::data + y * step); } | ||||
|             __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return (const T*)( (const char*)DevPtr<T>::data + y * step); } | ||||
| 
 | ||||
|             __CV_GPU_HOST_DEVICE__       T& operator ()(int y, int x)       { return ptr(y)[x]; } | ||||
|             __CV_GPU_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; } | ||||
|         }; | ||||
| 
 | ||||
|         template <typename T> struct PtrStepSz : public PtrStep<T> | ||||
|         { | ||||
|             __CV_GPU_HOST_DEVICE__ PtrStepSz() : cols(0), rows(0) {} | ||||
|             __CV_GPU_HOST_DEVICE__ PtrStepSz(int rows_, int cols_, T* data_, size_t step_) | ||||
|                 : PtrStep<T>(data_, step_), cols(cols_), rows(rows_) {} | ||||
| 
 | ||||
|             template <typename U> | ||||
|             explicit PtrStepSz(const PtrStepSz<U>& d) : PtrStep<T>((T*)d.data, d.step), cols(d.cols), rows(d.rows){} | ||||
| 
 | ||||
|             int cols; | ||||
|             int rows; | ||||
|         }; | ||||
| 
 | ||||
|         typedef PtrStepSz<unsigned char> PtrStepSzb; | ||||
|         typedef PtrStepSz<float> PtrStepSzf; | ||||
|         typedef PtrStepSz<int> PtrStepSzi; | ||||
| 
 | ||||
|         typedef PtrStep<unsigned char> PtrStepb; | ||||
|         typedef PtrStep<float> PtrStepf; | ||||
|         typedef PtrStep<int> PtrStepi; | ||||
| 
 | ||||
| #if defined __GNUC__ | ||||
|     #define CV_GPU_DEPRECATED __attribute__ ((deprecated)) | ||||
| #elif defined(__MSVC__) //|| defined(__CUDACC__)
 | ||||
|     #pragma deprecated(DevMem2D_) | ||||
|     #define CV_GPU_DEPRECATED __declspec(deprecated) | ||||
| #else | ||||
|     #define CV_GPU_DEPRECATED | ||||
| #endif | ||||
| 
 | ||||
|         template <typename T> struct DevMem2D_ : public PtrStepSz<T> | ||||
|         { | ||||
|             CV_GPU_DEPRECATED DevMem2D_() {} | ||||
|             CV_GPU_DEPRECATED DevMem2D_(int rows_, int cols_, T* data_, size_t step_) : PtrStepSz<T>(rows_, cols_, data_, step_) {} | ||||
| 
 | ||||
|             template <typename U> | ||||
|             explicit CV_GPU_DEPRECATED DevMem2D_(const DevMem2D_<U>& d) : PtrStepSz<T>(d.rows, d.cols, (T*)d.data, d.step) {} | ||||
|         }; | ||||
| 
 | ||||
|         typedef DevMem2D_<unsigned char> DevMem2Db; | ||||
|         typedef DevMem2Db DevMem2D; | ||||
|         typedef DevMem2D_<float> DevMem2Df; | ||||
|         typedef DevMem2D_<int> DevMem2Di; | ||||
| 
 | ||||
|         template<typename T> struct PtrElemStep_ : public PtrStep<T> | ||||
|         { | ||||
|             PtrElemStep_(const DevMem2D_<T>& mem) : PtrStep<T>(mem.data, mem.step) | ||||
|             { | ||||
|                 StaticAssert<256 % sizeof(T) == 0>::check(); | ||||
| 
 | ||||
|                 PtrStep<T>::step /= PtrStep<T>::elem_size; | ||||
|             } | ||||
|             __CV_GPU_HOST_DEVICE__ T* ptr(int y = 0) { return PtrStep<T>::data + y * PtrStep<T>::step; } | ||||
|             __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return PtrStep<T>::data + y * PtrStep<T>::step; } | ||||
| 
 | ||||
|             __CV_GPU_HOST_DEVICE__ T& operator ()(int y, int x) { return ptr(y)[x]; } | ||||
|             __CV_GPU_HOST_DEVICE__ const T& operator ()(int y, int x) const { return ptr(y)[x]; } | ||||
|         }; | ||||
| 
 | ||||
|         template<typename T> struct PtrStep_ : public PtrStep<T> | ||||
|         { | ||||
|             PtrStep_() {} | ||||
|             PtrStep_(const DevMem2D_<T>& mem) : PtrStep<T>(mem.data, mem.step) {} | ||||
|         }; | ||||
| 
 | ||||
|         typedef PtrElemStep_<unsigned char> PtrElemStep; | ||||
|         typedef PtrElemStep_<float> PtrElemStepf; | ||||
|         typedef PtrElemStep_<int> PtrElemStepi; | ||||
| 
 | ||||
| //#undef CV_GPU_DEPRECATED
 | ||||
| 
 | ||||
|         namespace device | ||||
|         { | ||||
|             using cv::gpu::PtrSz; | ||||
|             using cv::gpu::PtrStep; | ||||
|             using cv::gpu::PtrStepSz; | ||||
| 
 | ||||
|             using cv::gpu::PtrStepSzb; | ||||
|             using cv::gpu::PtrStepSzf; | ||||
|             using cv::gpu::PtrStepSzi; | ||||
| 
 | ||||
|             using cv::gpu::PtrStepb; | ||||
|             using cv::gpu::PtrStepf; | ||||
|             using cv::gpu::PtrStepi; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #endif // __cplusplus
 | ||||
| 
 | ||||
| #endif /* __OPENCV_CORE_DEVPTRS_HPP__ */ | ||||
| @ -1,43 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #include "opencv2/core/cuda_devptrs.hpp" | ||||
| @ -1,280 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                          License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_CORE_EIGEN_HPP__ | ||||
| #define __OPENCV_CORE_EIGEN_HPP__ | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| #include "opencv2/core/core_c.h" | ||||
| #include "opencv2/core/core.hpp" | ||||
| 
 | ||||
| #if defined _MSC_VER && _MSC_VER >= 1200 | ||||
| #pragma warning( disable: 4714 ) //__forceinline is not inlined
 | ||||
| #pragma warning( disable: 4127 ) //conditional expression is constant
 | ||||
| #pragma warning( disable: 4244 ) //conversion from '__int64' to 'int', possible loss of data
 | ||||
| #endif | ||||
| 
 | ||||
| namespace cv | ||||
| { | ||||
| 
 | ||||
| template<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> | ||||
| void eigen2cv( const Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& src, Mat& dst ) | ||||
| { | ||||
|     if( !(src.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _src(src.cols(), src.rows(), DataType<_Tp>::type, | ||||
|               (void*)src.data(), src.stride()*sizeof(_Tp)); | ||||
|         transpose(_src, dst); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _src(src.rows(), src.cols(), DataType<_Tp>::type, | ||||
|                  (void*)src.data(), src.stride()*sizeof(_Tp)); | ||||
|         _src.copyTo(dst); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| template<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> | ||||
| void cv2eigen( const Mat& src, | ||||
|                Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst ) | ||||
| { | ||||
|     CV_DbgAssert(src.rows == _rows && src.cols == _cols); | ||||
|     if( !(dst.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _dst(src.cols, src.rows, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         if( src.type() == _dst.type() ) | ||||
|             transpose(src, _dst); | ||||
|         else if( src.cols == src.rows ) | ||||
|         { | ||||
|             src.convertTo(_dst, _dst.type()); | ||||
|             transpose(_dst, _dst); | ||||
|         } | ||||
|         else | ||||
|             Mat(src.t()).convertTo(_dst, _dst.type()); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _dst(src.rows, src.cols, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         src.convertTo(_dst, _dst.type()); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Matx case
 | ||||
| template<typename _Tp, int _rows, int _cols, int _options, int _maxRows, int _maxCols> | ||||
| void cv2eigen( const Matx<_Tp, _rows, _cols>& src, | ||||
|                Eigen::Matrix<_Tp, _rows, _cols, _options, _maxRows, _maxCols>& dst ) | ||||
| { | ||||
|     if( !(dst.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _dst(_cols, _rows, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         transpose(src, _dst); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _dst(_rows, _cols, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         Mat(src).copyTo(_dst); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| template<typename _Tp> | ||||
| void cv2eigen( const Mat& src, | ||||
|                Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst ) | ||||
| { | ||||
|     dst.resize(src.rows, src.cols); | ||||
|     if( !(dst.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _dst(src.cols, src.rows, DataType<_Tp>::type, | ||||
|              dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         if( src.type() == _dst.type() ) | ||||
|             transpose(src, _dst); | ||||
|         else if( src.cols == src.rows ) | ||||
|         { | ||||
|             src.convertTo(_dst, _dst.type()); | ||||
|             transpose(_dst, _dst); | ||||
|         } | ||||
|         else | ||||
|             Mat(src.t()).convertTo(_dst, _dst.type()); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _dst(src.rows, src.cols, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         src.convertTo(_dst, _dst.type()); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Matx case
 | ||||
| template<typename _Tp, int _rows, int _cols> | ||||
| void cv2eigen( const Matx<_Tp, _rows, _cols>& src, | ||||
|                Eigen::Matrix<_Tp, Eigen::Dynamic, Eigen::Dynamic>& dst ) | ||||
| { | ||||
|     dst.resize(_rows, _cols); | ||||
|     if( !(dst.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _dst(_cols, _rows, DataType<_Tp>::type, | ||||
|              dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         transpose(src, _dst); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _dst(_rows, _cols, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         Mat(src).copyTo(_dst); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| template<typename _Tp> | ||||
| void cv2eigen( const Mat& src, | ||||
|                Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst ) | ||||
| { | ||||
|     CV_Assert(src.cols == 1); | ||||
|     dst.resize(src.rows); | ||||
| 
 | ||||
|     if( !(dst.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _dst(src.cols, src.rows, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         if( src.type() == _dst.type() ) | ||||
|             transpose(src, _dst); | ||||
|         else | ||||
|             Mat(src.t()).convertTo(_dst, _dst.type()); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _dst(src.rows, src.cols, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         src.convertTo(_dst, _dst.type()); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Matx case
 | ||||
| template<typename _Tp, int _rows> | ||||
| void cv2eigen( const Matx<_Tp, _rows, 1>& src, | ||||
|                Eigen::Matrix<_Tp, Eigen::Dynamic, 1>& dst ) | ||||
| { | ||||
|     dst.resize(_rows); | ||||
| 
 | ||||
|     if( !(dst.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _dst(1, _rows, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         transpose(src, _dst); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _dst(_rows, 1, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         src.copyTo(_dst); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| template<typename _Tp> | ||||
| void cv2eigen( const Mat& src, | ||||
|                Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst ) | ||||
| { | ||||
|     CV_Assert(src.rows == 1); | ||||
|     dst.resize(src.cols); | ||||
|     if( !(dst.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _dst(src.cols, src.rows, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         if( src.type() == _dst.type() ) | ||||
|             transpose(src, _dst); | ||||
|         else | ||||
|             Mat(src.t()).convertTo(_dst, _dst.type()); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _dst(src.rows, src.cols, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         src.convertTo(_dst, _dst.type()); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| //Matx
 | ||||
| template<typename _Tp, int _cols> | ||||
| void cv2eigen( const Matx<_Tp, 1, _cols>& src, | ||||
|                Eigen::Matrix<_Tp, 1, Eigen::Dynamic>& dst ) | ||||
| { | ||||
|     dst.resize(_cols); | ||||
|     if( !(dst.Flags & Eigen::RowMajorBit) ) | ||||
|     { | ||||
|         Mat _dst(_cols, 1, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         transpose(src, _dst); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         Mat _dst(1, _cols, DataType<_Tp>::type, | ||||
|                  dst.data(), (size_t)(dst.stride()*sizeof(_Tp))); | ||||
|         Mat(src).copyTo(_dst); | ||||
|         CV_DbgAssert(_dst.data == (uchar*)dst.data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| @ -1,563 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_GPUMAT_HPP__ | ||||
| #define __OPENCV_GPUMAT_HPP__ | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| #include "opencv2/core/core.hpp" | ||||
| #include "opencv2/core/cuda_devptrs.hpp" | ||||
| 
 | ||||
| namespace cv { namespace gpu | ||||
| { | ||||
|     //////////////////////////////// Initialization & Info ////////////////////////
 | ||||
| 
 | ||||
|     //! This is the only function that do not throw exceptions if the library is compiled without Cuda.
 | ||||
|     CV_EXPORTS int getCudaEnabledDeviceCount(); | ||||
| 
 | ||||
|     //! Functions below throw cv::Expception if the library is compiled without Cuda.
 | ||||
| 
 | ||||
|     CV_EXPORTS void setDevice(int device); | ||||
|     CV_EXPORTS int getDevice(); | ||||
| 
 | ||||
|     //! Explicitly destroys and cleans up all resources associated with the current device in the current process.
 | ||||
|     //! Any subsequent API call to this device will reinitialize the device.
 | ||||
|     CV_EXPORTS void resetDevice(); | ||||
| 
 | ||||
|     enum FeatureSet | ||||
|     { | ||||
|         FEATURE_SET_COMPUTE_10 = 10, | ||||
|         FEATURE_SET_COMPUTE_11 = 11, | ||||
|         FEATURE_SET_COMPUTE_12 = 12, | ||||
|         FEATURE_SET_COMPUTE_13 = 13, | ||||
|         FEATURE_SET_COMPUTE_20 = 20, | ||||
|         FEATURE_SET_COMPUTE_21 = 21, | ||||
|         FEATURE_SET_COMPUTE_30 = 30, | ||||
|         FEATURE_SET_COMPUTE_35 = 35, | ||||
| 
 | ||||
|         GLOBAL_ATOMICS = FEATURE_SET_COMPUTE_11, | ||||
|         SHARED_ATOMICS = FEATURE_SET_COMPUTE_12, | ||||
|         NATIVE_DOUBLE = FEATURE_SET_COMPUTE_13, | ||||
|         WARP_SHUFFLE_FUNCTIONS = FEATURE_SET_COMPUTE_30, | ||||
|         DYNAMIC_PARALLELISM = FEATURE_SET_COMPUTE_35 | ||||
|     }; | ||||
| 
 | ||||
|     // Checks whether current device supports the given feature
 | ||||
|     CV_EXPORTS bool deviceSupports(FeatureSet feature_set); | ||||
| 
 | ||||
|     // Gives information about what GPU archs this OpenCV GPU module was
 | ||||
|     // compiled for
 | ||||
|     class CV_EXPORTS TargetArchs | ||||
|     { | ||||
|     public: | ||||
|         static bool builtWith(FeatureSet feature_set); | ||||
|         static bool has(int major, int minor); | ||||
|         static bool hasPtx(int major, int minor); | ||||
|         static bool hasBin(int major, int minor); | ||||
|         static bool hasEqualOrLessPtx(int major, int minor); | ||||
|         static bool hasEqualOrGreater(int major, int minor); | ||||
|         static bool hasEqualOrGreaterPtx(int major, int minor); | ||||
|         static bool hasEqualOrGreaterBin(int major, int minor); | ||||
|     private: | ||||
|         TargetArchs(); | ||||
|     }; | ||||
| 
 | ||||
|     // Gives information about the given GPU
 | ||||
|     class CV_EXPORTS DeviceInfo | ||||
|     { | ||||
|     public: | ||||
|         // Creates DeviceInfo object for the current GPU
 | ||||
|         DeviceInfo() : device_id_(getDevice()) { query(); } | ||||
| 
 | ||||
|         // Creates DeviceInfo object for the given GPU
 | ||||
|         DeviceInfo(int device_id) : device_id_(device_id) { query(); } | ||||
| 
 | ||||
|         std::string name() const { return name_; } | ||||
| 
 | ||||
|         // Return compute capability versions
 | ||||
|         int majorVersion() const { return majorVersion_; } | ||||
|         int minorVersion() const { return minorVersion_; } | ||||
| 
 | ||||
|         int multiProcessorCount() const { return multi_processor_count_; } | ||||
| 
 | ||||
|         size_t sharedMemPerBlock() const; | ||||
| 
 | ||||
|         void queryMemory(size_t& totalMemory, size_t& freeMemory) const; | ||||
|         size_t freeMemory() const; | ||||
|         size_t totalMemory() const; | ||||
| 
 | ||||
|         // Checks whether device supports the given feature
 | ||||
|         bool supports(FeatureSet feature_set) const; | ||||
| 
 | ||||
|         // Checks whether the GPU module can be run on the given device
 | ||||
|         bool isCompatible() const; | ||||
| 
 | ||||
|         int deviceID() const { return device_id_; } | ||||
| 
 | ||||
|     private: | ||||
|         void query(); | ||||
| 
 | ||||
|         int device_id_; | ||||
| 
 | ||||
|         std::string name_; | ||||
|         int multi_processor_count_; | ||||
|         int majorVersion_; | ||||
|         int minorVersion_; | ||||
|     }; | ||||
| 
 | ||||
|     CV_EXPORTS void printCudaDeviceInfo(int device); | ||||
|     CV_EXPORTS void printShortCudaDeviceInfo(int device); | ||||
| 
 | ||||
|     //////////////////////////////// GpuMat ///////////////////////////////
 | ||||
| 
 | ||||
|     //! Smart pointer for GPU memory with reference counting. Its interface is mostly similar with cv::Mat.
 | ||||
|     class CV_EXPORTS GpuMat | ||||
|     { | ||||
|     public: | ||||
|         //! default constructor
 | ||||
|         GpuMat(); | ||||
| 
 | ||||
|         //! constructs GpuMatrix of the specified size and type (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
 | ||||
|         GpuMat(int rows, int cols, int type); | ||||
|         GpuMat(Size size, int type); | ||||
| 
 | ||||
|         //! constucts GpuMatrix and fills it with the specified value _s.
 | ||||
|         GpuMat(int rows, int cols, int type, Scalar s); | ||||
|         GpuMat(Size size, int type, Scalar s); | ||||
| 
 | ||||
|         //! copy constructor
 | ||||
|         GpuMat(const GpuMat& m); | ||||
| 
 | ||||
|         //! constructor for GpuMatrix headers pointing to user-allocated data
 | ||||
|         GpuMat(int rows, int cols, int type, void* data, size_t step = Mat::AUTO_STEP); | ||||
|         GpuMat(Size size, int type, void* data, size_t step = Mat::AUTO_STEP); | ||||
| 
 | ||||
|         //! creates a matrix header for a part of the bigger matrix
 | ||||
|         GpuMat(const GpuMat& m, Range rowRange, Range colRange); | ||||
|         GpuMat(const GpuMat& m, Rect roi); | ||||
| 
 | ||||
|         //! builds GpuMat from Mat. Perfom blocking upload to device.
 | ||||
|         explicit GpuMat(const Mat& m); | ||||
| 
 | ||||
|         //! destructor - calls release()
 | ||||
|         ~GpuMat(); | ||||
| 
 | ||||
|         //! assignment operators
 | ||||
|         GpuMat& operator = (const GpuMat& m); | ||||
| 
 | ||||
|         //! pefroms blocking upload data to GpuMat.
 | ||||
|         void upload(const Mat& m); | ||||
| 
 | ||||
|         //! downloads data from device to host memory. Blocking calls.
 | ||||
|         void download(Mat& m) const; | ||||
| 
 | ||||
|         //! returns a new GpuMatrix header for the specified row
 | ||||
|         GpuMat row(int y) const; | ||||
|         //! returns a new GpuMatrix header for the specified column
 | ||||
|         GpuMat col(int x) const; | ||||
|         //! ... for the specified row span
 | ||||
|         GpuMat rowRange(int startrow, int endrow) const; | ||||
|         GpuMat rowRange(Range r) const; | ||||
|         //! ... for the specified column span
 | ||||
|         GpuMat colRange(int startcol, int endcol) const; | ||||
|         GpuMat colRange(Range r) const; | ||||
| 
 | ||||
|         //! returns deep copy of the GpuMatrix, i.e. the data is copied
 | ||||
|         GpuMat clone() const; | ||||
|         //! copies the GpuMatrix content to "m".
 | ||||
|         // It calls m.create(this->size(), this->type()).
 | ||||
|         void copyTo(GpuMat& m) const; | ||||
|         //! copies those GpuMatrix elements to "m" that are marked with non-zero mask elements.
 | ||||
|         void copyTo(GpuMat& m, const GpuMat& mask) const; | ||||
|         //! converts GpuMatrix to another datatype with optional scalng. See cvConvertScale.
 | ||||
|         void convertTo(GpuMat& m, int rtype, double alpha = 1, double beta = 0) const; | ||||
| 
 | ||||
|         void assignTo(GpuMat& m, int type=-1) const; | ||||
| 
 | ||||
|         //! sets every GpuMatrix element to s
 | ||||
|         GpuMat& operator = (Scalar s); | ||||
|         //! sets some of the GpuMatrix elements to s, according to the mask
 | ||||
|         GpuMat& setTo(Scalar s, const GpuMat& mask = GpuMat()); | ||||
|         //! creates alternative GpuMatrix header for the same data, with different
 | ||||
|         // number of channels and/or different number of rows. see cvReshape.
 | ||||
|         GpuMat reshape(int cn, int rows = 0) const; | ||||
| 
 | ||||
|         //! allocates new GpuMatrix data unless the GpuMatrix already has specified size and type.
 | ||||
|         // previous data is unreferenced if needed.
 | ||||
|         void create(int rows, int cols, int type); | ||||
|         void create(Size size, int type); | ||||
|         //! decreases reference counter;
 | ||||
|         // deallocate the data when reference counter reaches 0.
 | ||||
|         void release(); | ||||
| 
 | ||||
|         //! swaps with other smart pointer
 | ||||
|         void swap(GpuMat& mat); | ||||
| 
 | ||||
|         //! locates GpuMatrix header within a parent GpuMatrix. See below
 | ||||
|         void locateROI(Size& wholeSize, Point& ofs) const; | ||||
|         //! moves/resizes the current GpuMatrix ROI inside the parent GpuMatrix.
 | ||||
|         GpuMat& adjustROI(int dtop, int dbottom, int dleft, int dright); | ||||
|         //! extracts a rectangular sub-GpuMatrix
 | ||||
|         // (this is a generalized form of row, rowRange etc.)
 | ||||
|         GpuMat operator()(Range rowRange, Range colRange) const; | ||||
|         GpuMat operator()(Rect roi) const; | ||||
| 
 | ||||
|         //! returns true iff the GpuMatrix data is continuous
 | ||||
|         // (i.e. when there are no gaps between successive rows).
 | ||||
|         // similar to CV_IS_GpuMat_CONT(cvGpuMat->type)
 | ||||
|         bool isContinuous() const; | ||||
|         //! returns element size in bytes,
 | ||||
|         // similar to CV_ELEM_SIZE(cvMat->type)
 | ||||
|         size_t elemSize() const; | ||||
|         //! returns the size of element channel in bytes.
 | ||||
|         size_t elemSize1() const; | ||||
|         //! returns element type, similar to CV_MAT_TYPE(cvMat->type)
 | ||||
|         int type() const; | ||||
|         //! returns element type, similar to CV_MAT_DEPTH(cvMat->type)
 | ||||
|         int depth() const; | ||||
|         //! returns element type, similar to CV_MAT_CN(cvMat->type)
 | ||||
|         int channels() const; | ||||
|         //! returns step/elemSize1()
 | ||||
|         size_t step1() const; | ||||
|         //! returns GpuMatrix size:
 | ||||
|         // width == number of columns, height == number of rows
 | ||||
|         Size size() const; | ||||
|         //! returns true if GpuMatrix data is NULL
 | ||||
|         bool empty() const; | ||||
| 
 | ||||
|         //! returns pointer to y-th row
 | ||||
|         uchar* ptr(int y = 0); | ||||
|         const uchar* ptr(int y = 0) const; | ||||
| 
 | ||||
|         //! template version of the above method
 | ||||
|         template<typename _Tp> _Tp* ptr(int y = 0); | ||||
|         template<typename _Tp> const _Tp* ptr(int y = 0) const; | ||||
| 
 | ||||
|         template <typename _Tp> operator PtrStepSz<_Tp>() const; | ||||
|         template <typename _Tp> operator PtrStep<_Tp>() const; | ||||
| 
 | ||||
|         // Deprecated function
 | ||||
|         template <typename _Tp> CV_GPU_DEPRECATED operator DevMem2D_<_Tp>() const; | ||||
|         template <typename _Tp> CV_GPU_DEPRECATED operator PtrStep_<_Tp>() const; | ||||
|         #undef CV_GPU_DEPRECATED | ||||
| 
 | ||||
|         /*! includes several bit-fields:
 | ||||
|         - the magic signature | ||||
|         - continuity flag | ||||
|         - depth | ||||
|         - number of channels | ||||
|         */ | ||||
|         int flags; | ||||
| 
 | ||||
|         //! the number of rows and columns
 | ||||
|         int rows, cols; | ||||
| 
 | ||||
|         //! a distance between successive rows in bytes; includes the gap if any
 | ||||
|         size_t step; | ||||
| 
 | ||||
|         //! pointer to the data
 | ||||
|         uchar* data; | ||||
| 
 | ||||
|         //! pointer to the reference counter;
 | ||||
|         // when GpuMatrix points to user-allocated data, the pointer is NULL
 | ||||
|         int* refcount; | ||||
| 
 | ||||
|         //! helper fields used in locateROI and adjustROI
 | ||||
|         uchar* datastart; | ||||
|         uchar* dataend; | ||||
|     }; | ||||
| 
 | ||||
|     //! Creates continuous GPU matrix
 | ||||
|     CV_EXPORTS void createContinuous(int rows, int cols, int type, GpuMat& m); | ||||
|     CV_EXPORTS GpuMat createContinuous(int rows, int cols, int type); | ||||
|     CV_EXPORTS void createContinuous(Size size, int type, GpuMat& m); | ||||
|     CV_EXPORTS GpuMat createContinuous(Size size, int type); | ||||
| 
 | ||||
|     //! Ensures that size of the given matrix is not less than (rows, cols) size
 | ||||
|     //! and matrix type is match specified one too
 | ||||
|     CV_EXPORTS void ensureSizeIsEnough(int rows, int cols, int type, GpuMat& m); | ||||
|     CV_EXPORTS void ensureSizeIsEnough(Size size, int type, GpuMat& m); | ||||
| 
 | ||||
|     CV_EXPORTS GpuMat allocMatFromBuf(int rows, int cols, int type, GpuMat &mat); | ||||
| 
 | ||||
|     ////////////////////////////////////////////////////////////////////////
 | ||||
|     // Error handling
 | ||||
| 
 | ||||
|     CV_EXPORTS void error(const char* error_string, const char* file, const int line, const char* func = ""); | ||||
| 
 | ||||
|     ////////////////////////////////////////////////////////////////////////
 | ||||
|     ////////////////////////////////////////////////////////////////////////
 | ||||
|     ////////////////////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
|     inline GpuMat::GpuMat() | ||||
|         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) | ||||
|     { | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat::GpuMat(int rows_, int cols_, int type_) | ||||
|         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) | ||||
|     { | ||||
|         if (rows_ > 0 && cols_ > 0) | ||||
|             create(rows_, cols_, type_); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat::GpuMat(Size size_, int type_) | ||||
|         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) | ||||
|     { | ||||
|         if (size_.height > 0 && size_.width > 0) | ||||
|             create(size_.height, size_.width, type_); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat::GpuMat(int rows_, int cols_, int type_, Scalar s_) | ||||
|         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) | ||||
|     { | ||||
|         if (rows_ > 0 && cols_ > 0) | ||||
|         { | ||||
|             create(rows_, cols_, type_); | ||||
|             setTo(s_); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat::GpuMat(Size size_, int type_, Scalar s_) | ||||
|         : flags(0), rows(0), cols(0), step(0), data(0), refcount(0), datastart(0), dataend(0) | ||||
|     { | ||||
|         if (size_.height > 0 && size_.width > 0) | ||||
|         { | ||||
|             create(size_.height, size_.width, type_); | ||||
|             setTo(s_); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat::~GpuMat() | ||||
|     { | ||||
|         release(); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::clone() const | ||||
|     { | ||||
|         GpuMat m; | ||||
|         copyTo(m); | ||||
|         return m; | ||||
|     } | ||||
| 
 | ||||
|     inline void GpuMat::assignTo(GpuMat& m, int _type) const | ||||
|     { | ||||
|         if (_type < 0) | ||||
|             m = *this; | ||||
|         else | ||||
|             convertTo(m, _type); | ||||
|     } | ||||
| 
 | ||||
|     inline size_t GpuMat::step1() const | ||||
|     { | ||||
|         return step / elemSize1(); | ||||
|     } | ||||
| 
 | ||||
|     inline bool GpuMat::empty() const | ||||
|     { | ||||
|         return data == 0; | ||||
|     } | ||||
| 
 | ||||
|     template<typename _Tp> inline _Tp* GpuMat::ptr(int y) | ||||
|     { | ||||
|         return (_Tp*)ptr(y); | ||||
|     } | ||||
| 
 | ||||
|     template<typename _Tp> inline const _Tp* GpuMat::ptr(int y) const | ||||
|     { | ||||
|         return (const _Tp*)ptr(y); | ||||
|     } | ||||
| 
 | ||||
|     inline void swap(GpuMat& a, GpuMat& b) | ||||
|     { | ||||
|         a.swap(b); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::row(int y) const | ||||
|     { | ||||
|         return GpuMat(*this, Range(y, y+1), Range::all()); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::col(int x) const | ||||
|     { | ||||
|         return GpuMat(*this, Range::all(), Range(x, x+1)); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::rowRange(int startrow, int endrow) const | ||||
|     { | ||||
|         return GpuMat(*this, Range(startrow, endrow), Range::all()); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::rowRange(Range r) const | ||||
|     { | ||||
|         return GpuMat(*this, r, Range::all()); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::colRange(int startcol, int endcol) const | ||||
|     { | ||||
|         return GpuMat(*this, Range::all(), Range(startcol, endcol)); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::colRange(Range r) const | ||||
|     { | ||||
|         return GpuMat(*this, Range::all(), r); | ||||
|     } | ||||
| 
 | ||||
|     inline void GpuMat::create(Size size_, int type_) | ||||
|     { | ||||
|         create(size_.height, size_.width, type_); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::operator()(Range _rowRange, Range _colRange) const | ||||
|     { | ||||
|         return GpuMat(*this, _rowRange, _colRange); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat GpuMat::operator()(Rect roi) const | ||||
|     { | ||||
|         return GpuMat(*this, roi); | ||||
|     } | ||||
| 
 | ||||
|     inline bool GpuMat::isContinuous() const | ||||
|     { | ||||
|         return (flags & Mat::CONTINUOUS_FLAG) != 0; | ||||
|     } | ||||
| 
 | ||||
|     inline size_t GpuMat::elemSize() const | ||||
|     { | ||||
|         return CV_ELEM_SIZE(flags); | ||||
|     } | ||||
| 
 | ||||
|     inline size_t GpuMat::elemSize1() const | ||||
|     { | ||||
|         return CV_ELEM_SIZE1(flags); | ||||
|     } | ||||
| 
 | ||||
|     inline int GpuMat::type() const | ||||
|     { | ||||
|         return CV_MAT_TYPE(flags); | ||||
|     } | ||||
| 
 | ||||
|     inline int GpuMat::depth() const | ||||
|     { | ||||
|         return CV_MAT_DEPTH(flags); | ||||
|     } | ||||
| 
 | ||||
|     inline int GpuMat::channels() const | ||||
|     { | ||||
|         return CV_MAT_CN(flags); | ||||
|     } | ||||
| 
 | ||||
|     inline Size GpuMat::size() const | ||||
|     { | ||||
|         return Size(cols, rows); | ||||
|     } | ||||
| 
 | ||||
|     inline uchar* GpuMat::ptr(int y) | ||||
|     { | ||||
|         CV_DbgAssert((unsigned)y < (unsigned)rows); | ||||
|         return data + step * y; | ||||
|     } | ||||
| 
 | ||||
|     inline const uchar* GpuMat::ptr(int y) const | ||||
|     { | ||||
|         CV_DbgAssert((unsigned)y < (unsigned)rows); | ||||
|         return data + step * y; | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat& GpuMat::operator = (Scalar s) | ||||
|     { | ||||
|         setTo(s); | ||||
|         return *this; | ||||
|     } | ||||
| 
 | ||||
|     /** @cond IGNORED */ | ||||
|     template <class T> inline GpuMat::operator PtrStepSz<T>() const | ||||
|     { | ||||
|         return PtrStepSz<T>(rows, cols, (T*)data, step); | ||||
|     } | ||||
| 
 | ||||
|     template <class T> inline GpuMat::operator PtrStep<T>() const | ||||
|     { | ||||
|         return PtrStep<T>((T*)data, step); | ||||
|     } | ||||
| 
 | ||||
|     template <class T> inline GpuMat::operator DevMem2D_<T>() const | ||||
|     { | ||||
|         return DevMem2D_<T>(rows, cols, (T*)data, step); | ||||
|     } | ||||
| 
 | ||||
|     template <class T> inline GpuMat::operator PtrStep_<T>() const | ||||
|     { | ||||
|         return PtrStep_<T>(static_cast< DevMem2D_<T> >(*this)); | ||||
|     } | ||||
|     /** @endcond */ | ||||
| 
 | ||||
|     inline GpuMat createContinuous(int rows, int cols, int type) | ||||
|     { | ||||
|         GpuMat m; | ||||
|         createContinuous(rows, cols, type, m); | ||||
|         return m; | ||||
|     } | ||||
| 
 | ||||
|     inline void createContinuous(Size size, int type, GpuMat& m) | ||||
|     { | ||||
|         createContinuous(size.height, size.width, type, m); | ||||
|     } | ||||
| 
 | ||||
|     inline GpuMat createContinuous(Size size, int type) | ||||
|     { | ||||
|         GpuMat m; | ||||
|         createContinuous(size, type, m); | ||||
|         return m; | ||||
|     } | ||||
| 
 | ||||
|     inline void ensureSizeIsEnough(Size size, int type, GpuMat& m) | ||||
|     { | ||||
|         ensureSizeIsEnough(size.height, size.width, type, m); | ||||
|     } | ||||
| }} | ||||
| 
 | ||||
| #endif // __cplusplus
 | ||||
| 
 | ||||
| #endif // __OPENCV_GPUMAT_HPP__
 | ||||
| @ -1,799 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| /* The header is for internal use and it is likely to change.
 | ||||
|    It contains some macro definitions that are used in cxcore, cv, cvaux | ||||
|    and, probably, other libraries. If you need some of this functionality, | ||||
|    the safe way is to copy it into your code and rename the macros. | ||||
| */ | ||||
| #ifndef __OPENCV_CORE_INTERNAL_HPP__ | ||||
| #define __OPENCV_CORE_INTERNAL_HPP__ | ||||
| 
 | ||||
| #include <vector> | ||||
| 
 | ||||
| #include "opencv2/core/core.hpp" | ||||
| #include "opencv2/core/types_c.h" | ||||
| 
 | ||||
| #if defined WIN32 || defined _WIN32 | ||||
| #  ifndef WIN32 | ||||
| #    define WIN32 | ||||
| #  endif | ||||
| #  ifndef _WIN32 | ||||
| #    define _WIN32 | ||||
| #  endif | ||||
| #endif | ||||
| 
 | ||||
| #if !defined WIN32 && !defined WINCE | ||||
| #  include <pthread.h> | ||||
| #endif | ||||
| 
 | ||||
| #ifdef __BORLANDC__ | ||||
| #  ifndef WIN32 | ||||
| #    define WIN32 | ||||
| #  endif | ||||
| #  ifndef _WIN32 | ||||
| #    define _WIN32 | ||||
| #  endif | ||||
| #  define CV_DLL | ||||
| #  undef _CV_ALWAYS_PROFILE_ | ||||
| #  define _CV_ALWAYS_NO_PROFILE_ | ||||
| #endif | ||||
| 
 | ||||
| #ifndef FALSE | ||||
| #  define FALSE 0 | ||||
| #endif | ||||
| #ifndef TRUE | ||||
| #  define TRUE 1 | ||||
| #endif | ||||
| 
 | ||||
| #define __BEGIN__ __CV_BEGIN__ | ||||
| #define __END__ __CV_END__ | ||||
| #define EXIT __CV_EXIT__ | ||||
| 
 | ||||
| #ifdef HAVE_IPP | ||||
| #  include "ipp.h" | ||||
| 
 | ||||
| CV_INLINE IppiSize ippiSize(int width, int height) | ||||
| { | ||||
|     IppiSize size = { width, height }; | ||||
|     return size; | ||||
| } | ||||
| 
 | ||||
| CV_INLINE IppiSize ippiSize(const cv::Size & _size) | ||||
| { | ||||
|     IppiSize size = { _size.width, _size.height }; | ||||
|     return size; | ||||
| } | ||||
| 
 | ||||
| #if IPP_VERSION_MAJOR >= 9 // IPP 9+ is not supported
 | ||||
| #undef HAVE_IPP | ||||
| #undef IPP_VERSION_MAJOR | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| #ifndef IPPI_CALL | ||||
| #  define IPPI_CALL(func) CV_Assert((func) >= 0) | ||||
| #endif | ||||
| 
 | ||||
| #if defined __SSE2__ || defined _M_X64  || (defined _M_IX86_FP && _M_IX86_FP >= 2) | ||||
| #  include "emmintrin.h" | ||||
| #  define CV_SSE 1 | ||||
| #  define CV_SSE2 1 | ||||
| #  if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500) | ||||
| #    include "pmmintrin.h" | ||||
| #    define CV_SSE3 1 | ||||
| #  endif | ||||
| #  if defined __SSSE3__  || (defined _MSC_VER && _MSC_VER >= 1500) | ||||
| #    include "tmmintrin.h" | ||||
| #    define CV_SSSE3 1 | ||||
| #  endif | ||||
| #  if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500) | ||||
| #    include <smmintrin.h> | ||||
| #    define CV_SSE4_1 1 | ||||
| #  endif | ||||
| #  if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500) | ||||
| #    include <nmmintrin.h> | ||||
| #    define CV_SSE4_2 1 | ||||
| #  endif | ||||
| #  if defined __AVX__ || (defined _MSC_FULL_VER && _MSC_FULL_VER >= 160040219) | ||||
| // MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX
 | ||||
| // See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32
 | ||||
| #    include <immintrin.h> | ||||
| #    define CV_AVX 1 | ||||
| #    if defined(_XCR_XFEATURE_ENABLED_MASK) | ||||
| #      define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK) | ||||
| #    else | ||||
| #      define __xgetbv() 0 | ||||
| #    endif | ||||
| #  endif | ||||
| #  if defined __AVX2__ | ||||
| #    include <immintrin.h> | ||||
| #    define CV_AVX2 1 | ||||
| #  endif | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #if (defined WIN32 || defined _WIN32) && defined(_M_ARM) | ||||
| # include <Intrin.h> | ||||
| # include "arm_neon.h" | ||||
| # define CV_NEON 1 | ||||
| # define CPU_HAS_NEON_FEATURE (true) | ||||
| #elif defined(__ARM_NEON__) || defined(__ARM_NEON) | ||||
| #  include <arm_neon.h> | ||||
| #  define CV_NEON 1 | ||||
| #  define CPU_HAS_NEON_FEATURE (true) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef CV_SSE | ||||
| #  define CV_SSE 0 | ||||
| #endif | ||||
| #ifndef CV_SSE2 | ||||
| #  define CV_SSE2 0 | ||||
| #endif | ||||
| #ifndef CV_SSE3 | ||||
| #  define CV_SSE3 0 | ||||
| #endif | ||||
| #ifndef CV_SSSE3 | ||||
| #  define CV_SSSE3 0 | ||||
| #endif | ||||
| #ifndef CV_SSE4_1 | ||||
| #  define CV_SSE4_1 0 | ||||
| #endif | ||||
| #ifndef CV_SSE4_2 | ||||
| #  define CV_SSE4_2 0 | ||||
| #endif | ||||
| #ifndef CV_AVX | ||||
| #  define CV_AVX 0 | ||||
| #endif | ||||
| #ifndef CV_AVX2 | ||||
| #  define CV_AVX2 0 | ||||
| #endif | ||||
| #ifndef CV_NEON | ||||
| #  define CV_NEON 0 | ||||
| #endif | ||||
| 
 | ||||
| #ifdef HAVE_TBB | ||||
| #  include "tbb/tbb_stddef.h" | ||||
| #  if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202 | ||||
| #    include "tbb/tbb.h" | ||||
| #    include "tbb/task.h" | ||||
| #    undef min | ||||
| #    undef max | ||||
| #  else | ||||
| #    undef HAVE_TBB | ||||
| #  endif | ||||
| #endif | ||||
| 
 | ||||
| #ifdef HAVE_EIGEN | ||||
| #  if defined __GNUC__ && defined __APPLE__ | ||||
| #    pragma GCC diagnostic ignored "-Wshadow" | ||||
| #  endif | ||||
| #  include <Eigen/Core> | ||||
| #  include "opencv2/core/eigen.hpp" | ||||
| #endif | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| namespace cv | ||||
| { | ||||
| #ifdef HAVE_TBB | ||||
| 
 | ||||
|     typedef tbb::blocked_range<int> BlockedRange; | ||||
| 
 | ||||
|     template<typename Body> static inline | ||||
|     void parallel_for( const BlockedRange& range, const Body& body ) | ||||
|     { | ||||
|         tbb::parallel_for(range, body); | ||||
|     } | ||||
| 
 | ||||
|     template<typename Iterator, typename Body> static inline | ||||
|     void parallel_do( Iterator first, Iterator last, const Body& body ) | ||||
|     { | ||||
|         tbb::parallel_do(first, last, body); | ||||
|     } | ||||
| 
 | ||||
|     typedef tbb::split Split; | ||||
| 
 | ||||
|     template<typename Body> static inline | ||||
|     void parallel_reduce( const BlockedRange& range, Body& body ) | ||||
|     { | ||||
|         tbb::parallel_reduce(range, body); | ||||
|     } | ||||
| 
 | ||||
|     typedef tbb::concurrent_vector<Rect> ConcurrentRectVector; | ||||
|     typedef tbb::concurrent_vector<double> ConcurrentDoubleVector; | ||||
| #else | ||||
|     class BlockedRange | ||||
|     { | ||||
|     public: | ||||
|         BlockedRange() : _begin(0), _end(0), _grainsize(0) {} | ||||
|         BlockedRange(int b, int e, int g=1) : _begin(b), _end(e), _grainsize(g) {} | ||||
|         int begin() const { return _begin; } | ||||
|         int end() const { return _end; } | ||||
|         int grainsize() const { return _grainsize; } | ||||
| 
 | ||||
|     protected: | ||||
|         int _begin, _end, _grainsize; | ||||
|     }; | ||||
| 
 | ||||
|     template<typename Body> static inline | ||||
|     void parallel_for( const BlockedRange& range, const Body& body ) | ||||
|     { | ||||
|         body(range); | ||||
|     } | ||||
|     typedef std::vector<Rect> ConcurrentRectVector; | ||||
|     typedef std::vector<double> ConcurrentDoubleVector; | ||||
| 
 | ||||
|     template<typename Iterator, typename Body> static inline | ||||
|     void parallel_do( Iterator first, Iterator last, const Body& body ) | ||||
|     { | ||||
|         for( ; first != last; ++first ) | ||||
|             body(*first); | ||||
|     } | ||||
| 
 | ||||
|     class Split {}; | ||||
| 
 | ||||
|     template<typename Body> static inline | ||||
|     void parallel_reduce( const BlockedRange& range, Body& body ) | ||||
|     { | ||||
|         body(range); | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
|     // Returns a static string if there is a parallel framework,
 | ||||
|     // NULL otherwise.
 | ||||
|     CV_EXPORTS const char* currentParallelFramework(); | ||||
| } //namespace cv
 | ||||
| 
 | ||||
| #define CV_INIT_ALGORITHM(classname, algname, memberinit) \ | ||||
|     static ::cv::Algorithm* create##classname() \
 | ||||
|     { \
 | ||||
|         return new classname; \
 | ||||
|     } \
 | ||||
|     \
 | ||||
|     static ::cv::AlgorithmInfo& classname##_info() \
 | ||||
|     { \
 | ||||
|         static ::cv::AlgorithmInfo classname##_info_var(algname, create##classname); \
 | ||||
|         return classname##_info_var; \
 | ||||
|     } \
 | ||||
|     \
 | ||||
|     CV_ATTR_USED static ::cv::AlgorithmInfo& classname##_info_auto = classname##_info(); \
 | ||||
|     \
 | ||||
|     ::cv::AlgorithmInfo* classname::info() const \
 | ||||
|     { \
 | ||||
|         static volatile bool initialized = false; \
 | ||||
|         \
 | ||||
|         if( !initialized ) \
 | ||||
|         { \
 | ||||
|             initialized = true; \
 | ||||
|             classname obj; \
 | ||||
|             memberinit; \
 | ||||
|         } \
 | ||||
|         return &classname##_info(); \
 | ||||
|     } | ||||
| 
 | ||||
| #endif //__cplusplus
 | ||||
| 
 | ||||
| /* maximal size of vector to run matrix operations on it inline (i.e. w/o ipp calls) */ | ||||
| #define  CV_MAX_INLINE_MAT_OP_SIZE  10 | ||||
| 
 | ||||
| /* maximal linear size of matrix to allocate it on stack. */ | ||||
| #define  CV_MAX_LOCAL_MAT_SIZE  32 | ||||
| 
 | ||||
| /* maximal size of local memory storage */ | ||||
| #define  CV_MAX_LOCAL_SIZE  \ | ||||
|     (CV_MAX_LOCAL_MAT_SIZE*CV_MAX_LOCAL_MAT_SIZE*(int)sizeof(double)) | ||||
| 
 | ||||
| /* default image row align (in bytes) */ | ||||
| #define  CV_DEFAULT_IMAGE_ROW_ALIGN  4 | ||||
| 
 | ||||
| /* matrices are continuous by default */ | ||||
| #define  CV_DEFAULT_MAT_ROW_ALIGN  1 | ||||
| 
 | ||||
| /* maximum size of dynamic memory buffer.
 | ||||
|    cvAlloc reports an error if a larger block is requested. */ | ||||
| #define  CV_MAX_ALLOC_SIZE    (((size_t)1 << (sizeof(size_t)*8-2))) | ||||
| 
 | ||||
| /* the alignment of all the allocated buffers */ | ||||
| #define  CV_MALLOC_ALIGN    16 | ||||
| 
 | ||||
| /* default alignment for dynamic data strucutures, resided in storages. */ | ||||
| #define  CV_STRUCT_ALIGN    ((int)sizeof(double)) | ||||
| 
 | ||||
| /* default storage block size */ | ||||
| #define  CV_STORAGE_BLOCK_SIZE   ((1<<16) - 128) | ||||
| 
 | ||||
| /* default memory block for sparse array elements */ | ||||
| #define  CV_SPARSE_MAT_BLOCK    (1<<12) | ||||
| 
 | ||||
| /* initial hash table size */ | ||||
| #define  CV_SPARSE_HASH_SIZE0    (1<<10) | ||||
| 
 | ||||
| /* maximal average node_count/hash_size ratio beyond which hash table is resized */ | ||||
| #define  CV_SPARSE_HASH_RATIO    3 | ||||
| 
 | ||||
| /* max length of strings */ | ||||
| #define  CV_MAX_STRLEN  1024 | ||||
| 
 | ||||
| #if 0 /*def  CV_CHECK_FOR_NANS*/
 | ||||
| #  define CV_CHECK_NANS( arr ) cvCheckArray((arr)) | ||||
| #else | ||||
| #  define CV_CHECK_NANS( arr ) | ||||
| #endif | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                                  Common declarations                                   * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| #ifdef __GNUC__ | ||||
| #  define CV_DECL_ALIGNED(x) __attribute__ ((aligned (x))) | ||||
| #elif defined _MSC_VER | ||||
| #  define CV_DECL_ALIGNED(x) __declspec(align(x)) | ||||
| #else | ||||
| #  define CV_DECL_ALIGNED(x) | ||||
| #endif | ||||
| 
 | ||||
| #ifndef CV_IMPL | ||||
| #  define CV_IMPL CV_EXTERN_C | ||||
| #endif | ||||
| 
 | ||||
| #define CV_DBG_BREAK() { volatile int* crashMe = 0; *crashMe = 0; } | ||||
| 
 | ||||
| /* default step, set in case of continuous data
 | ||||
|    to work around checks for valid step in some ipp functions */ | ||||
| #define  CV_STUB_STEP     (1 << 30) | ||||
| 
 | ||||
| #define  CV_SIZEOF_FLOAT ((int)sizeof(float)) | ||||
| #define  CV_SIZEOF_SHORT ((int)sizeof(short)) | ||||
| 
 | ||||
| #define  CV_ORIGIN_TL  0 | ||||
| #define  CV_ORIGIN_BL  1 | ||||
| 
 | ||||
| /* IEEE754 constants and macros */ | ||||
| #define  CV_POS_INF       0x7f800000 | ||||
| #define  CV_NEG_INF       0x807fffff /* CV_TOGGLE_FLT(0xff800000) */ | ||||
| #define  CV_1F            0x3f800000 | ||||
| #define  CV_TOGGLE_FLT(x) ((x)^((int)(x) < 0 ? 0x7fffffff : 0)) | ||||
| #define  CV_TOGGLE_DBL(x) \ | ||||
|     ((x)^((int64)(x) < 0 ? CV_BIG_INT(0x7fffffffffffffff) : 0)) | ||||
| 
 | ||||
| #define  CV_NOP(a)      (a) | ||||
| #define  CV_ADD(a, b)   ((a) + (b)) | ||||
| #define  CV_SUB(a, b)   ((a) - (b)) | ||||
| #define  CV_MUL(a, b)   ((a) * (b)) | ||||
| #define  CV_AND(a, b)   ((a) & (b)) | ||||
| #define  CV_OR(a, b)    ((a) | (b)) | ||||
| #define  CV_XOR(a, b)   ((a) ^ (b)) | ||||
| #define  CV_ANDN(a, b)  (~(a) & (b)) | ||||
| #define  CV_ORN(a, b)   (~(a) | (b)) | ||||
| #define  CV_SQR(a)      ((a) * (a)) | ||||
| 
 | ||||
| #define  CV_LT(a, b)    ((a) < (b)) | ||||
| #define  CV_LE(a, b)    ((a) <= (b)) | ||||
| #define  CV_EQ(a, b)    ((a) == (b)) | ||||
| #define  CV_NE(a, b)    ((a) != (b)) | ||||
| #define  CV_GT(a, b)    ((a) > (b)) | ||||
| #define  CV_GE(a, b)    ((a) >= (b)) | ||||
| 
 | ||||
| #define  CV_NONZERO(a)      ((a) != 0) | ||||
| #define  CV_NONZERO_FLT(a)  (((a)+(a)) != 0) | ||||
| 
 | ||||
| /* general-purpose saturation macros */ | ||||
| #define  CV_CAST_8U(t)  (uchar)(!((t) & ~255) ? (t) : (t) > 0 ? 255 : 0) | ||||
| #define  CV_CAST_8S(t)  (schar)(!(((t)+128) & ~255) ? (t) : (t) > 0 ? 127 : -128) | ||||
| #define  CV_CAST_16U(t) (ushort)(!((t) & ~65535) ? (t) : (t) > 0 ? 65535 : 0) | ||||
| #define  CV_CAST_16S(t) (short)(!(((t)+32768) & ~65535) ? (t) : (t) > 0 ? 32767 : -32768) | ||||
| #define  CV_CAST_32S(t) (int)(t) | ||||
| #define  CV_CAST_64S(t) (int64)(t) | ||||
| #define  CV_CAST_32F(t) (float)(t) | ||||
| #define  CV_CAST_64F(t) (double)(t) | ||||
| 
 | ||||
| #define  CV_PASTE2(a,b) a##b | ||||
| #define  CV_PASTE(a,b)  CV_PASTE2(a,b) | ||||
| 
 | ||||
| #define  CV_EMPTY | ||||
| #define  CV_MAKE_STR(a) #a | ||||
| 
 | ||||
| #define  CV_ZERO_OBJ(x) memset((x), 0, sizeof(*(x))) | ||||
| 
 | ||||
| #define  CV_DIM(static_array) ((int)(sizeof(static_array)/sizeof((static_array)[0]))) | ||||
| 
 | ||||
| #define  cvUnsupportedFormat "Unsupported format" | ||||
| 
 | ||||
| CV_INLINE void* cvAlignPtr( const void* ptr, int align CV_DEFAULT(32) ) | ||||
| { | ||||
|     assert( (align & (align-1)) == 0 ); | ||||
|     return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) ); | ||||
| } | ||||
| 
 | ||||
| CV_INLINE int cvAlign( int size, int align ) | ||||
| { | ||||
|     assert( (align & (align-1)) == 0 && size < INT_MAX ); | ||||
|     return (size + align - 1) & -align; | ||||
| } | ||||
| 
 | ||||
| CV_INLINE  CvSize  cvGetMatSize( const CvMat* mat ) | ||||
| { | ||||
|     CvSize size; | ||||
|     size.width = mat->cols; | ||||
|     size.height = mat->rows; | ||||
|     return size; | ||||
| } | ||||
| 
 | ||||
| #define  CV_DESCALE(x,n)     (((x) + (1 << ((n)-1))) >> (n)) | ||||
| #define  CV_FLT_TO_FIX(x,n)  cvRound((x)*(1<<(n))) | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| 
 | ||||
|   Generic implementation of QuickSort algorithm. | ||||
|   ---------------------------------------------- | ||||
|   Using this macro user can declare customized sort function that can be much faster | ||||
|   than built-in qsort function because of lower overhead on elements | ||||
|   comparison and exchange. The macro takes less_than (or LT) argument - a macro or function | ||||
|   that takes 2 arguments returns non-zero if the first argument should be before the second | ||||
|   one in the sorted sequence and zero otherwise. | ||||
| 
 | ||||
|   Example: | ||||
| 
 | ||||
|     Suppose that the task is to sort points by ascending of y coordinates and if | ||||
|     y's are equal x's should ascend. | ||||
| 
 | ||||
|     The code is: | ||||
|     ------------------------------------------------------------------------------ | ||||
|            #define cmp_pts( pt1, pt2 ) \ | ||||
|                ((pt1).y < (pt2).y || ((pt1).y < (pt2).y && (pt1).x < (pt2).x)) | ||||
| 
 | ||||
|            [static] CV_IMPLEMENT_QSORT( icvSortPoints, CvPoint, cmp_pts ) | ||||
|     ------------------------------------------------------------------------------ | ||||
| 
 | ||||
|     After that the function "void icvSortPoints( CvPoint* array, size_t total, int aux );" | ||||
|     is available to user. | ||||
| 
 | ||||
|   aux is an additional parameter, which can be used when comparing elements. | ||||
|   The current implementation was derived from *BSD system qsort(): | ||||
| 
 | ||||
|     * Copyright (c) 1992, 1993 | ||||
|     *  The Regents of the University of California.  All rights reserved. | ||||
|     * | ||||
|     * Redistribution and use in source and binary forms, with or without | ||||
|     * modification, are permitted provided that the following conditions | ||||
|     * are met: | ||||
|     * 1. Redistributions of source code must retain the above copyright | ||||
|     *    notice, this list of conditions and the following disclaimer. | ||||
|     * 2. Redistributions in binary form must reproduce the above copyright | ||||
|     *    notice, this list of conditions and the following disclaimer in the | ||||
|     *    documentation and/or other materials provided with the distribution. | ||||
|     * 3. All advertising materials mentioning features or use of this software | ||||
|     *    must display the following acknowledgement: | ||||
|     *  This product includes software developed by the University of | ||||
|     *  California, Berkeley and its contributors. | ||||
|     * 4. Neither the name of the University nor the names of its contributors | ||||
|     *    may be used to endorse or promote products derived from this software | ||||
|     *    without specific prior written permission. | ||||
|     * | ||||
|     * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | ||||
|     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|     * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | ||||
|     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|     * SUCH DAMAGE. | ||||
| 
 | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| #define CV_IMPLEMENT_QSORT_EX( func_name, T, LT, user_data_type )                   \ | ||||
| void func_name( T *array, size_t total, user_data_type aux )                        \
 | ||||
| {                                                                                   \
 | ||||
|     int isort_thresh = 7;                                                           \
 | ||||
|     T t;                                                                            \
 | ||||
|     int sp = 0;                                                                     \
 | ||||
|                                                                                     \
 | ||||
|     struct                                                                          \ | ||||
|     {                                                                               \
 | ||||
|         T *lb;                                                                      \
 | ||||
|         T *ub;                                                                      \
 | ||||
|     }                                                                               \
 | ||||
|     stack[48];                                                                      \
 | ||||
|                                                                                     \
 | ||||
|     (void)aux;                                                                      \
 | ||||
|                                                                                     \
 | ||||
|     if( total <= 1 )                                                                \
 | ||||
|         return;                                                                     \
 | ||||
|                                                                                     \
 | ||||
|     stack[0].lb = array;                                                            \
 | ||||
|     stack[0].ub = array + (total - 1);                                              \
 | ||||
|                                                                                     \
 | ||||
|     while( sp >= 0 )                                                                \
 | ||||
|     {                                                                               \
 | ||||
|         T* left = stack[sp].lb;                                                     \
 | ||||
|         T* right = stack[sp--].ub;                                                  \
 | ||||
|                                                                                     \
 | ||||
|         for(;;)                                                                     \
 | ||||
|         {                                                                           \
 | ||||
|             int i, n = (int)(right - left) + 1, m;                                  \
 | ||||
|             T* ptr;                                                                 \
 | ||||
|             T* ptr2;                                                                \
 | ||||
|                                                                                     \
 | ||||
|             if( n <= isort_thresh )                                                 \
 | ||||
|             {                                                                       \
 | ||||
|             insert_sort:                                                            \
 | ||||
|                 for( ptr = left + 1; ptr <= right; ptr++ )                          \
 | ||||
|                 {                                                                   \
 | ||||
|                     for( ptr2 = ptr; ptr2 > left && LT(ptr2[0],ptr2[-1]); ptr2--)   \
 | ||||
|                         CV_SWAP( ptr2[0], ptr2[-1], t );                            \
 | ||||
|                 }                                                                   \
 | ||||
|                 break;                                                              \
 | ||||
|             }                                                                       \
 | ||||
|             else                                                                    \
 | ||||
|             {                                                                       \
 | ||||
|                 T* left0;                                                           \
 | ||||
|                 T* left1;                                                           \
 | ||||
|                 T* right0;                                                          \
 | ||||
|                 T* right1;                                                          \
 | ||||
|                 T* pivot;                                                           \
 | ||||
|                 T* a;                                                               \
 | ||||
|                 T* b;                                                               \
 | ||||
|                 T* c;                                                               \
 | ||||
|                 int swap_cnt = 0;                                                   \
 | ||||
|                                                                                     \
 | ||||
|                 left0 = left;                                                       \
 | ||||
|                 right0 = right;                                                     \
 | ||||
|                 pivot = left + (n/2);                                               \
 | ||||
|                                                                                     \
 | ||||
|                 if( n > 40 )                                                        \
 | ||||
|                 {                                                                   \
 | ||||
|                     int d = n / 8;                                                  \
 | ||||
|                     a = left, b = left + d, c = left + 2*d;                         \
 | ||||
|                     left = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))     \
 | ||||
|                                       : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \
 | ||||
|                                                                                     \
 | ||||
|                     a = pivot - d, b = pivot, c = pivot + d;                        \
 | ||||
|                     pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))    \
 | ||||
|                                       : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \
 | ||||
|                                                                                     \
 | ||||
|                     a = right - 2*d, b = right - d, c = right;                      \
 | ||||
|                     right = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))    \
 | ||||
|                                       : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));    \
 | ||||
|                 }                                                                   \
 | ||||
|                                                                                     \
 | ||||
|                 a = left, b = pivot, c = right;                                     \
 | ||||
|                 pivot = LT(*a, *b) ? (LT(*b, *c) ? b : (LT(*a, *c) ? c : a))        \
 | ||||
|                                    : (LT(*c, *b) ? b : (LT(*a, *c) ? a : c));       \
 | ||||
|                 if( pivot != left0 )                                                \
 | ||||
|                 {                                                                   \
 | ||||
|                     CV_SWAP( *pivot, *left0, t );                                   \
 | ||||
|                     pivot = left0;                                                  \
 | ||||
|                 }                                                                   \
 | ||||
|                 left = left1 = left0 + 1;                                           \
 | ||||
|                 right = right1 = right0;                                            \
 | ||||
|                                                                                     \
 | ||||
|                 for(;;)                                                             \
 | ||||
|                 {                                                                   \
 | ||||
|                     while( left <= right && !LT(*pivot, *left) )                    \
 | ||||
|                     {                                                               \
 | ||||
|                         if( !LT(*left, *pivot) )                                    \
 | ||||
|                         {                                                           \
 | ||||
|                             if( left > left1 )                                      \
 | ||||
|                                 CV_SWAP( *left1, *left, t );                        \
 | ||||
|                             swap_cnt = 1;                                           \
 | ||||
|                             left1++;                                                \
 | ||||
|                         }                                                           \
 | ||||
|                         left++;                                                     \
 | ||||
|                     }                                                               \
 | ||||
|                                                                                     \
 | ||||
|                     while( left <= right && !LT(*right, *pivot) )                   \
 | ||||
|                     {                                                               \
 | ||||
|                         if( !LT(*pivot, *right) )                                   \
 | ||||
|                         {                                                           \
 | ||||
|                             if( right < right1 )                                    \
 | ||||
|                                 CV_SWAP( *right1, *right, t );                      \
 | ||||
|                             swap_cnt = 1;                                           \
 | ||||
|                             right1--;                                               \
 | ||||
|                         }                                                           \
 | ||||
|                         right--;                                                    \
 | ||||
|                     }                                                               \
 | ||||
|                                                                                     \
 | ||||
|                     if( left > right )                                              \
 | ||||
|                         break;                                                      \
 | ||||
|                     CV_SWAP( *left, *right, t );                                    \
 | ||||
|                     swap_cnt = 1;                                                   \
 | ||||
|                     left++;                                                         \
 | ||||
|                     right--;                                                        \
 | ||||
|                 }                                                                   \
 | ||||
|                                                                                     \
 | ||||
|                 if( swap_cnt == 0 )                                                 \
 | ||||
|                 {                                                                   \
 | ||||
|                     left = left0, right = right0;                                   \
 | ||||
|                     goto insert_sort;                                               \
 | ||||
|                 }                                                                   \
 | ||||
|                                                                                     \
 | ||||
|                 n = MIN( (int)(left1 - left0), (int)(left - left1) );               \
 | ||||
|                 for( i = 0; i < n; i++ )                                            \
 | ||||
|                     CV_SWAP( left0[i], left[i-n], t );                              \
 | ||||
|                                                                                     \
 | ||||
|                 n = MIN( (int)(right0 - right1), (int)(right1 - right) );           \
 | ||||
|                 for( i = 0; i < n; i++ )                                            \
 | ||||
|                     CV_SWAP( left[i], right0[i-n+1], t );                           \
 | ||||
|                 n = (int)(left - left1);                                            \
 | ||||
|                 m = (int)(right1 - right);                                          \
 | ||||
|                 if( n > 1 )                                                         \
 | ||||
|                 {                                                                   \
 | ||||
|                     if( m > 1 )                                                     \
 | ||||
|                     {                                                               \
 | ||||
|                         if( n > m )                                                 \
 | ||||
|                         {                                                           \
 | ||||
|                             stack[++sp].lb = left0;                                 \
 | ||||
|                             stack[sp].ub = left0 + n - 1;                           \
 | ||||
|                             left = right0 - m + 1, right = right0;                  \
 | ||||
|                         }                                                           \
 | ||||
|                         else                                                        \
 | ||||
|                         {                                                           \
 | ||||
|                             stack[++sp].lb = right0 - m + 1;                        \
 | ||||
|                             stack[sp].ub = right0;                                  \
 | ||||
|                             left = left0, right = left0 + n - 1;                    \
 | ||||
|                         }                                                           \
 | ||||
|                     }                                                               \
 | ||||
|                     else                                                            \
 | ||||
|                         left = left0, right = left0 + n - 1;                        \
 | ||||
|                 }                                                                   \
 | ||||
|                 else if( m > 1 )                                                    \
 | ||||
|                     left = right0 - m + 1, right = right0;                          \
 | ||||
|                 else                                                                \
 | ||||
|                     break;                                                          \
 | ||||
|             }                                                                       \
 | ||||
|         }                                                                           \
 | ||||
|     }                                                                               \
 | ||||
| } | ||||
| 
 | ||||
| #define CV_IMPLEMENT_QSORT( func_name, T, cmp )  \ | ||||
|     CV_IMPLEMENT_QSORT_EX( func_name, T, cmp, int ) | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                     Structures and macros for integration with IPP                     * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| /* IPP-compatible return codes */ | ||||
| typedef enum CvStatus | ||||
| { | ||||
|     CV_BADMEMBLOCK_ERR          = -113, | ||||
|     CV_INPLACE_NOT_SUPPORTED_ERR= -112, | ||||
|     CV_UNMATCHED_ROI_ERR        = -111, | ||||
|     CV_NOTFOUND_ERR             = -110, | ||||
|     CV_BADCONVERGENCE_ERR       = -109, | ||||
| 
 | ||||
|     CV_BADDEPTH_ERR             = -107, | ||||
|     CV_BADROI_ERR               = -106, | ||||
|     CV_BADHEADER_ERR            = -105, | ||||
|     CV_UNMATCHED_FORMATS_ERR    = -104, | ||||
|     CV_UNSUPPORTED_COI_ERR      = -103, | ||||
|     CV_UNSUPPORTED_CHANNELS_ERR = -102, | ||||
|     CV_UNSUPPORTED_DEPTH_ERR    = -101, | ||||
|     CV_UNSUPPORTED_FORMAT_ERR   = -100, | ||||
| 
 | ||||
|     CV_BADARG_ERR               = -49,  //ipp comp
 | ||||
|     CV_NOTDEFINED_ERR           = -48,  //ipp comp
 | ||||
| 
 | ||||
|     CV_BADCHANNELS_ERR          = -47,  //ipp comp
 | ||||
|     CV_BADRANGE_ERR             = -44,  //ipp comp
 | ||||
|     CV_BADSTEP_ERR              = -29,  //ipp comp
 | ||||
| 
 | ||||
|     CV_BADFLAG_ERR              =  -12, | ||||
|     CV_DIV_BY_ZERO_ERR          =  -11, //ipp comp
 | ||||
|     CV_BADCOEF_ERR              =  -10, | ||||
| 
 | ||||
|     CV_BADFACTOR_ERR            =  -7, | ||||
|     CV_BADPOINT_ERR             =  -6, | ||||
|     CV_BADSCALE_ERR             =  -4, | ||||
|     CV_OUTOFMEM_ERR             =  -3, | ||||
|     CV_NULLPTR_ERR              =  -2, | ||||
|     CV_BADSIZE_ERR              =  -1, | ||||
|     CV_NO_ERR                   =   0, | ||||
|     CV_OK                       =   CV_NO_ERR | ||||
| } | ||||
| CvStatus; | ||||
| 
 | ||||
| #define CV_NOTHROW throw() | ||||
| 
 | ||||
| typedef struct CvFuncTable | ||||
| { | ||||
|     void*   fn_2d[CV_DEPTH_MAX]; | ||||
| } | ||||
| CvFuncTable; | ||||
| 
 | ||||
| typedef struct CvBigFuncTable | ||||
| { | ||||
|     void*   fn_2d[CV_DEPTH_MAX*4]; | ||||
| } CvBigFuncTable; | ||||
| 
 | ||||
| #define CV_INIT_FUNC_TAB( tab, FUNCNAME, FLAG )         \ | ||||
|     (tab).fn_2d[CV_8U] = (void*)FUNCNAME##_8u##FLAG;    \
 | ||||
|     (tab).fn_2d[CV_8S] = 0;                             \
 | ||||
|     (tab).fn_2d[CV_16U] = (void*)FUNCNAME##_16u##FLAG;  \
 | ||||
|     (tab).fn_2d[CV_16S] = (void*)FUNCNAME##_16s##FLAG;  \
 | ||||
|     (tab).fn_2d[CV_32S] = (void*)FUNCNAME##_32s##FLAG;  \
 | ||||
|     (tab).fn_2d[CV_32F] = (void*)FUNCNAME##_32f##FLAG;  \
 | ||||
|     (tab).fn_2d[CV_64F] = (void*)FUNCNAME##_64f##FLAG | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| // < Deprecated
 | ||||
| 
 | ||||
| class CV_EXPORTS CvOpenGlFuncTab | ||||
| { | ||||
| public: | ||||
|     virtual ~CvOpenGlFuncTab(); | ||||
| 
 | ||||
|     virtual void genBuffers(int n, unsigned int* buffers) const = 0; | ||||
|     virtual void deleteBuffers(int n, const unsigned int* buffers) const = 0; | ||||
| 
 | ||||
|     virtual void bufferData(unsigned int target, ptrdiff_t size, const void* data, unsigned int usage) const = 0; | ||||
|     virtual void bufferSubData(unsigned int target, ptrdiff_t offset, ptrdiff_t size, const void* data) const = 0; | ||||
| 
 | ||||
|     virtual void bindBuffer(unsigned int target, unsigned int buffer) const = 0; | ||||
| 
 | ||||
|     virtual void* mapBuffer(unsigned int target, unsigned int access) const = 0; | ||||
|     virtual void unmapBuffer(unsigned int target) const = 0; | ||||
| 
 | ||||
|     virtual void generateBitmapFont(const std::string& family, int height, int weight, bool italic, bool underline, int start, int count, int base) const = 0; | ||||
| 
 | ||||
|     virtual bool isGlContextInitialized() const = 0; | ||||
| }; | ||||
| 
 | ||||
| CV_EXPORTS void icvSetOpenGlFuncTab(const CvOpenGlFuncTab* tab); | ||||
| 
 | ||||
| CV_EXPORTS bool icvCheckGlError(const char* file, const int line, const char* func = ""); | ||||
| 
 | ||||
| // >
 | ||||
| 
 | ||||
| namespace cv { namespace ogl { | ||||
| CV_EXPORTS bool checkError(const char* file, const int line, const char* func = ""); | ||||
| }} | ||||
| 
 | ||||
| #define CV_CheckGlError() CV_DbgAssert( (cv::ogl::checkError(__FILE__, __LINE__, CV_Func)) ) | ||||
| 
 | ||||
| #endif //__cplusplus
 | ||||
| 
 | ||||
| #endif // __OPENCV_CORE_INTERNAL_HPP__
 | ||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -1,284 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_OPENGL_INTEROP_HPP__ | ||||
| #define __OPENCV_OPENGL_INTEROP_HPP__ | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| #include "opencv2/core/core.hpp" | ||||
| #include "opencv2/core/opengl_interop_deprecated.hpp" | ||||
| 
 | ||||
| namespace cv { namespace ogl { | ||||
| 
 | ||||
| /////////////////// OpenGL Objects ///////////////////
 | ||||
| 
 | ||||
| //! Smart pointer for OpenGL buffer memory with reference counting.
 | ||||
| class CV_EXPORTS Buffer | ||||
| { | ||||
| public: | ||||
|     enum Target | ||||
|     { | ||||
|         ARRAY_BUFFER         = 0x8892, //!< The buffer will be used as a source for vertex data
 | ||||
|         ELEMENT_ARRAY_BUFFER = 0x8893, //!< The buffer will be used for indices (in glDrawElements, for example)
 | ||||
|         PIXEL_PACK_BUFFER    = 0x88EB, //!< The buffer will be used for reading from OpenGL textures
 | ||||
|         PIXEL_UNPACK_BUFFER  = 0x88EC  //!< The buffer will be used for writing to OpenGL textures
 | ||||
|     }; | ||||
| 
 | ||||
|     enum Access | ||||
|     { | ||||
|         READ_ONLY  = 0x88B8, | ||||
|         WRITE_ONLY = 0x88B9, | ||||
|         READ_WRITE = 0x88BA | ||||
|     }; | ||||
| 
 | ||||
|     //! create empty buffer
 | ||||
|     Buffer(); | ||||
| 
 | ||||
|     //! create buffer from existed buffer id
 | ||||
|     Buffer(int arows, int acols, int atype, unsigned int abufId, bool autoRelease = false); | ||||
|     Buffer(Size asize, int atype, unsigned int abufId, bool autoRelease = false); | ||||
| 
 | ||||
|     //! create buffer
 | ||||
|     Buffer(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false); | ||||
|     Buffer(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false); | ||||
| 
 | ||||
|     //! copy from host/device memory
 | ||||
|     explicit Buffer(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false); | ||||
| 
 | ||||
|     //! create buffer
 | ||||
|     void create(int arows, int acols, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false); | ||||
|     void create(Size asize, int atype, Target target = ARRAY_BUFFER, bool autoRelease = false) { create(asize.height, asize.width, atype, target, autoRelease); } | ||||
| 
 | ||||
|     //! release memory and delete buffer object
 | ||||
|     void release(); | ||||
| 
 | ||||
|     //! set auto release mode (if true, release will be called in object's destructor)
 | ||||
|     void setAutoRelease(bool flag); | ||||
| 
 | ||||
|     //! copy from host/device memory
 | ||||
|     void copyFrom(InputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false); | ||||
| 
 | ||||
|     //! copy to host/device memory
 | ||||
|     void copyTo(OutputArray arr, Target target = ARRAY_BUFFER, bool autoRelease = false) const; | ||||
| 
 | ||||
|     //! create copy of current buffer
 | ||||
|     Buffer clone(Target target = ARRAY_BUFFER, bool autoRelease = false) const; | ||||
| 
 | ||||
|     //! bind buffer for specified target
 | ||||
|     void bind(Target target) const; | ||||
| 
 | ||||
|     //! unbind any buffers from specified target
 | ||||
|     static void unbind(Target target); | ||||
| 
 | ||||
|     //! map to host memory
 | ||||
|     Mat mapHost(Access access); | ||||
|     void unmapHost(); | ||||
| 
 | ||||
|     //! map to device memory
 | ||||
|     gpu::GpuMat mapDevice(); | ||||
|     void unmapDevice(); | ||||
| 
 | ||||
|     int rows() const { return rows_; } | ||||
|     int cols() const { return cols_; } | ||||
|     Size size() const { return Size(cols_, rows_); } | ||||
|     bool empty() const { return rows_ == 0 || cols_ == 0; } | ||||
| 
 | ||||
|     int type() const { return type_; } | ||||
|     int depth() const { return CV_MAT_DEPTH(type_); } | ||||
|     int channels() const { return CV_MAT_CN(type_); } | ||||
|     int elemSize() const { return CV_ELEM_SIZE(type_); } | ||||
|     int elemSize1() const { return CV_ELEM_SIZE1(type_); } | ||||
| 
 | ||||
|     unsigned int bufId() const; | ||||
| 
 | ||||
|     class Impl; | ||||
| 
 | ||||
| private: | ||||
|     Ptr<Impl> impl_; | ||||
|     int rows_; | ||||
|     int cols_; | ||||
|     int type_; | ||||
| }; | ||||
| 
 | ||||
| //! Smart pointer for OpenGL 2D texture memory with reference counting.
 | ||||
| class CV_EXPORTS Texture2D | ||||
| { | ||||
| public: | ||||
|     enum Format | ||||
|     { | ||||
|         NONE            = 0, | ||||
|         DEPTH_COMPONENT = 0x1902, //!< Depth
 | ||||
|         RGB             = 0x1907, //!< Red, Green, Blue
 | ||||
|         RGBA            = 0x1908  //!< Red, Green, Blue, Alpha
 | ||||
|     }; | ||||
| 
 | ||||
|     //! create empty texture
 | ||||
|     Texture2D(); | ||||
| 
 | ||||
|     //! create texture from existed texture id
 | ||||
|     Texture2D(int arows, int acols, Format aformat, unsigned int atexId, bool autoRelease = false); | ||||
|     Texture2D(Size asize, Format aformat, unsigned int atexId, bool autoRelease = false); | ||||
| 
 | ||||
|     //! create texture
 | ||||
|     Texture2D(int arows, int acols, Format aformat, bool autoRelease = false); | ||||
|     Texture2D(Size asize, Format aformat, bool autoRelease = false); | ||||
| 
 | ||||
|     //! copy from host/device memory
 | ||||
|     explicit Texture2D(InputArray arr, bool autoRelease = false); | ||||
| 
 | ||||
|     //! create texture
 | ||||
|     void create(int arows, int acols, Format aformat, bool autoRelease = false); | ||||
|     void create(Size asize, Format aformat, bool autoRelease = false) { create(asize.height, asize.width, aformat, autoRelease); } | ||||
| 
 | ||||
|     //! release memory and delete texture object
 | ||||
|     void release(); | ||||
| 
 | ||||
|     //! set auto release mode (if true, release will be called in object's destructor)
 | ||||
|     void setAutoRelease(bool flag); | ||||
| 
 | ||||
|     //! copy from host/device memory
 | ||||
|     void copyFrom(InputArray arr, bool autoRelease = false); | ||||
| 
 | ||||
|     //! copy to host/device memory
 | ||||
|     void copyTo(OutputArray arr, int ddepth = CV_32F, bool autoRelease = false) const; | ||||
| 
 | ||||
|     //! bind texture to current active texture unit for GL_TEXTURE_2D target
 | ||||
|     void bind() const; | ||||
| 
 | ||||
|     int rows() const { return rows_; } | ||||
|     int cols() const { return cols_; } | ||||
|     Size size() const { return Size(cols_, rows_); } | ||||
|     bool empty() const { return rows_ == 0 || cols_ == 0; } | ||||
| 
 | ||||
|     Format format() const { return format_; } | ||||
| 
 | ||||
|     unsigned int texId() const; | ||||
| 
 | ||||
|     class Impl; | ||||
| 
 | ||||
| private: | ||||
|     Ptr<Impl> impl_; | ||||
|     int rows_; | ||||
|     int cols_; | ||||
|     Format format_; | ||||
| }; | ||||
| 
 | ||||
| //! OpenGL Arrays
 | ||||
| class CV_EXPORTS Arrays | ||||
| { | ||||
| public: | ||||
|     Arrays(); | ||||
| 
 | ||||
|     void setVertexArray(InputArray vertex); | ||||
|     void resetVertexArray(); | ||||
| 
 | ||||
|     void setColorArray(InputArray color); | ||||
|     void resetColorArray(); | ||||
| 
 | ||||
|     void setNormalArray(InputArray normal); | ||||
|     void resetNormalArray(); | ||||
| 
 | ||||
|     void setTexCoordArray(InputArray texCoord); | ||||
|     void resetTexCoordArray(); | ||||
| 
 | ||||
|     void release(); | ||||
| 
 | ||||
|     void setAutoRelease(bool flag); | ||||
| 
 | ||||
|     void bind() const; | ||||
| 
 | ||||
|     int size() const { return size_; } | ||||
|     bool empty() const { return size_ == 0; } | ||||
| 
 | ||||
| private: | ||||
|     int size_; | ||||
|     Buffer vertex_; | ||||
|     Buffer color_; | ||||
|     Buffer normal_; | ||||
|     Buffer texCoord_; | ||||
| }; | ||||
| 
 | ||||
| /////////////////// Render Functions ///////////////////
 | ||||
| 
 | ||||
| //! render texture rectangle in window
 | ||||
| CV_EXPORTS void render(const Texture2D& tex, | ||||
|     Rect_<double> wndRect = Rect_<double>(0.0, 0.0, 1.0, 1.0), | ||||
|     Rect_<double> texRect = Rect_<double>(0.0, 0.0, 1.0, 1.0)); | ||||
| 
 | ||||
| //! render mode
 | ||||
| enum { | ||||
|     POINTS         = 0x0000, | ||||
|     LINES          = 0x0001, | ||||
|     LINE_LOOP      = 0x0002, | ||||
|     LINE_STRIP     = 0x0003, | ||||
|     TRIANGLES      = 0x0004, | ||||
|     TRIANGLE_STRIP = 0x0005, | ||||
|     TRIANGLE_FAN   = 0x0006, | ||||
|     QUADS          = 0x0007, | ||||
|     QUAD_STRIP     = 0x0008, | ||||
|     POLYGON        = 0x0009 | ||||
| }; | ||||
| 
 | ||||
| //! render OpenGL arrays
 | ||||
| CV_EXPORTS void render(const Arrays& arr, int mode = POINTS, Scalar color = Scalar::all(255)); | ||||
| CV_EXPORTS void render(const Arrays& arr, InputArray indices, int mode = POINTS, Scalar color = Scalar::all(255)); | ||||
| 
 | ||||
| }} // namespace cv::gl
 | ||||
| 
 | ||||
| namespace cv { namespace gpu { | ||||
| 
 | ||||
| //! set a CUDA device to use OpenGL interoperability
 | ||||
| CV_EXPORTS void setGlDevice(int device = 0); | ||||
| 
 | ||||
| }} | ||||
| 
 | ||||
| namespace cv { | ||||
| 
 | ||||
| template <> CV_EXPORTS void Ptr<cv::ogl::Buffer::Impl>::delete_obj(); | ||||
| template <> CV_EXPORTS void Ptr<cv::ogl::Texture2D::Impl>::delete_obj(); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| #endif // __cplusplus
 | ||||
| 
 | ||||
| #endif // __OPENCV_OPENGL_INTEROP_HPP__
 | ||||
| @ -1,300 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__ | ||||
| #define __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__ | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| #include "opencv2/core/core.hpp" | ||||
| 
 | ||||
| namespace cv | ||||
| { | ||||
| //! Smart pointer for OpenGL buffer memory with reference counting.
 | ||||
| class CV_EXPORTS GlBuffer | ||||
| { | ||||
| public: | ||||
|     enum Usage | ||||
|     { | ||||
|         ARRAY_BUFFER = 0x8892,  // buffer will use for OpenGL arrays (vertices, colors, normals, etc)
 | ||||
|         TEXTURE_BUFFER = 0x88EC // buffer will ise for OpenGL textures
 | ||||
|     }; | ||||
| 
 | ||||
|     //! create empty buffer
 | ||||
|     explicit GlBuffer(Usage usage); | ||||
| 
 | ||||
|     //! create buffer
 | ||||
|     GlBuffer(int rows, int cols, int type, Usage usage); | ||||
|     GlBuffer(Size size, int type, Usage usage); | ||||
| 
 | ||||
|     //! copy from host/device memory
 | ||||
|     GlBuffer(InputArray mat, Usage usage); | ||||
| 
 | ||||
|     void create(int rows, int cols, int type, Usage usage); | ||||
|     void create(Size size, int type, Usage usage); | ||||
|     void create(int rows, int cols, int type); | ||||
|     void create(Size size, int type); | ||||
| 
 | ||||
|     void release(); | ||||
| 
 | ||||
|     //! copy from host/device memory
 | ||||
|     void copyFrom(InputArray mat); | ||||
| 
 | ||||
|     void bind() const; | ||||
|     void unbind() const; | ||||
| 
 | ||||
|     //! map to host memory
 | ||||
|     Mat mapHost(); | ||||
|     void unmapHost(); | ||||
| 
 | ||||
|     //! map to device memory
 | ||||
|     gpu::GpuMat mapDevice(); | ||||
|     void unmapDevice(); | ||||
| 
 | ||||
|     inline int rows() const { return rows_; } | ||||
|     inline int cols() const { return cols_; } | ||||
|     inline Size size() const { return Size(cols_, rows_); } | ||||
|     inline bool empty() const { return rows_ == 0 || cols_ == 0; } | ||||
| 
 | ||||
|     inline int type() const { return type_; } | ||||
|     inline int depth() const { return CV_MAT_DEPTH(type_); } | ||||
|     inline int channels() const { return CV_MAT_CN(type_); } | ||||
|     inline int elemSize() const { return CV_ELEM_SIZE(type_); } | ||||
|     inline int elemSize1() const { return CV_ELEM_SIZE1(type_); } | ||||
| 
 | ||||
|     inline Usage usage() const { return usage_; } | ||||
| 
 | ||||
|     class Impl; | ||||
| private: | ||||
|     int rows_; | ||||
|     int cols_; | ||||
|     int type_; | ||||
|     Usage usage_; | ||||
| 
 | ||||
|     Ptr<Impl> impl_; | ||||
| }; | ||||
| 
 | ||||
| template <> CV_EXPORTS void Ptr<GlBuffer::Impl>::delete_obj(); | ||||
| 
 | ||||
| //! Smart pointer for OpenGL 2d texture memory with reference counting.
 | ||||
| class CV_EXPORTS GlTexture | ||||
| { | ||||
| public: | ||||
|     //! create empty texture
 | ||||
|     GlTexture(); | ||||
| 
 | ||||
|     //! create texture
 | ||||
|     GlTexture(int rows, int cols, int type); | ||||
|     GlTexture(Size size, int type); | ||||
| 
 | ||||
|     //! copy from host/device memory
 | ||||
|     explicit GlTexture(InputArray mat, bool bgra = true); | ||||
| 
 | ||||
|     void create(int rows, int cols, int type); | ||||
|     void create(Size size, int type); | ||||
|     void release(); | ||||
| 
 | ||||
|     //! copy from host/device memory
 | ||||
|     void copyFrom(InputArray mat, bool bgra = true); | ||||
| 
 | ||||
|     void bind() const; | ||||
|     void unbind() const; | ||||
| 
 | ||||
|     inline int rows() const { return rows_; } | ||||
|     inline int cols() const { return cols_; } | ||||
|     inline Size size() const { return Size(cols_, rows_); } | ||||
|     inline bool empty() const { return rows_ == 0 || cols_ == 0; } | ||||
| 
 | ||||
|     inline int type() const { return type_; } | ||||
|     inline int depth() const { return CV_MAT_DEPTH(type_); } | ||||
|     inline int channels() const { return CV_MAT_CN(type_); } | ||||
|     inline int elemSize() const { return CV_ELEM_SIZE(type_); } | ||||
|     inline int elemSize1() const { return CV_ELEM_SIZE1(type_); } | ||||
| 
 | ||||
|     class Impl; | ||||
| private: | ||||
|     int rows_; | ||||
|     int cols_; | ||||
|     int type_; | ||||
| 
 | ||||
|     Ptr<Impl> impl_; | ||||
|     GlBuffer buf_; | ||||
| }; | ||||
| 
 | ||||
| template <> CV_EXPORTS void Ptr<GlTexture::Impl>::delete_obj(); | ||||
| 
 | ||||
| //! OpenGL Arrays
 | ||||
| class CV_EXPORTS GlArrays | ||||
| { | ||||
| public: | ||||
|     inline GlArrays() | ||||
|         : vertex_(GlBuffer::ARRAY_BUFFER), color_(GlBuffer::ARRAY_BUFFER), normal_(GlBuffer::ARRAY_BUFFER), texCoord_(GlBuffer::ARRAY_BUFFER) | ||||
|     { | ||||
|     } | ||||
| 
 | ||||
|     void setVertexArray(InputArray vertex); | ||||
|     inline void resetVertexArray() { vertex_.release(); } | ||||
| 
 | ||||
|     void setColorArray(InputArray color, bool bgra = true); | ||||
|     inline void resetColorArray() { color_.release(); } | ||||
| 
 | ||||
|     void setNormalArray(InputArray normal); | ||||
|     inline void resetNormalArray() { normal_.release(); } | ||||
| 
 | ||||
|     void setTexCoordArray(InputArray texCoord); | ||||
|     inline void resetTexCoordArray() { texCoord_.release(); } | ||||
| 
 | ||||
|     void bind() const; | ||||
|     void unbind() const; | ||||
| 
 | ||||
|     inline int rows() const { return vertex_.rows(); } | ||||
|     inline int cols() const { return vertex_.cols(); } | ||||
|     inline Size size() const { return vertex_.size(); } | ||||
|     inline bool empty() const { return vertex_.empty(); } | ||||
| 
 | ||||
| private: | ||||
|     GlBuffer vertex_; | ||||
|     GlBuffer color_; | ||||
|     GlBuffer normal_; | ||||
|     GlBuffer texCoord_; | ||||
| }; | ||||
| 
 | ||||
| //! OpenGL Font
 | ||||
| class CV_EXPORTS GlFont | ||||
| { | ||||
| public: | ||||
|     enum Weight | ||||
|     { | ||||
|         WEIGHT_LIGHT    = 300, | ||||
|         WEIGHT_NORMAL   = 400, | ||||
|         WEIGHT_SEMIBOLD = 600, | ||||
|         WEIGHT_BOLD     = 700, | ||||
|         WEIGHT_BLACK    = 900 | ||||
|     }; | ||||
| 
 | ||||
|     enum Style | ||||
|     { | ||||
|         STYLE_NORMAL    = 0, | ||||
|         STYLE_ITALIC    = 1, | ||||
|         STYLE_UNDERLINE = 2 | ||||
|     }; | ||||
| 
 | ||||
|     static Ptr<GlFont> get(const std::string& family, int height = 12, Weight weight = WEIGHT_NORMAL, Style style = STYLE_NORMAL); | ||||
| 
 | ||||
|     void draw(const char* str, int len) const; | ||||
| 
 | ||||
|     inline const std::string& family() const { return family_; } | ||||
|     inline int height() const { return height_; } | ||||
|     inline Weight weight() const { return weight_; } | ||||
|     inline Style style() const { return style_; } | ||||
| 
 | ||||
| private: | ||||
|     GlFont(const std::string& family, int height, Weight weight, Style style); | ||||
| 
 | ||||
|     std::string family_; | ||||
|     int height_; | ||||
|     Weight weight_; | ||||
|     Style style_; | ||||
| 
 | ||||
|     unsigned int base_; | ||||
| 
 | ||||
|     GlFont(const GlFont&); | ||||
|     GlFont& operator =(const GlFont&); | ||||
| }; | ||||
| 
 | ||||
| //! render functions
 | ||||
| 
 | ||||
| //! render texture rectangle in window
 | ||||
| CV_EXPORTS void render(const GlTexture& tex, | ||||
|     Rect_<double> wndRect = Rect_<double>(0.0, 0.0, 1.0, 1.0), | ||||
|     Rect_<double> texRect = Rect_<double>(0.0, 0.0, 1.0, 1.0)); | ||||
| 
 | ||||
| //! render mode
 | ||||
| namespace RenderMode { | ||||
|     enum { | ||||
|         POINTS         = 0x0000, | ||||
|         LINES          = 0x0001, | ||||
|         LINE_LOOP      = 0x0002, | ||||
|         LINE_STRIP     = 0x0003, | ||||
|         TRIANGLES      = 0x0004, | ||||
|         TRIANGLE_STRIP = 0x0005, | ||||
|         TRIANGLE_FAN   = 0x0006, | ||||
|         QUADS          = 0x0007, | ||||
|         QUAD_STRIP     = 0x0008, | ||||
|         POLYGON        = 0x0009 | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| //! render OpenGL arrays
 | ||||
| CV_EXPORTS void render(const GlArrays& arr, int mode = RenderMode::POINTS, Scalar color = Scalar::all(255)); | ||||
| 
 | ||||
| CV_EXPORTS void render(const std::string& str, const Ptr<GlFont>& font, Scalar color, Point2d pos); | ||||
| 
 | ||||
| //! OpenGL camera
 | ||||
| class CV_EXPORTS GlCamera | ||||
| { | ||||
| public: | ||||
|     GlCamera(); | ||||
| 
 | ||||
|     void lookAt(Point3d eye, Point3d center, Point3d up); | ||||
|     void setCameraPos(Point3d pos, double yaw, double pitch, double roll); | ||||
| 
 | ||||
|     void setScale(Point3d scale); | ||||
| 
 | ||||
|     void setProjectionMatrix(const Mat& projectionMatrix, bool transpose = true); | ||||
|     void setPerspectiveProjection(double fov, double aspect, double zNear, double zFar); | ||||
|     void setOrthoProjection(double left, double right, double bottom, double top, double zNear, double zFar); | ||||
| 
 | ||||
|     void setupProjectionMatrix() const; | ||||
|     void setupModelViewMatrix() const; | ||||
| }; | ||||
| 
 | ||||
| inline void GlBuffer::create(Size _size, int _type, Usage _usage) { create(_size.height, _size.width, _type, _usage); } | ||||
| inline void GlBuffer::create(int _rows, int _cols, int _type) { create(_rows, _cols, _type, usage()); } | ||||
| inline void GlBuffer::create(Size _size, int _type) { create(_size.height, _size.width, _type, usage()); } | ||||
| inline void GlTexture::create(Size _size, int _type) { create(_size.height, _size.width, _type); } | ||||
| 
 | ||||
| } // namespace cv
 | ||||
| 
 | ||||
| #endif // __cplusplus
 | ||||
| 
 | ||||
| #endif // __OPENCV_OPENGL_INTEROP_DEPRECATED_HPP__
 | ||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -1,72 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                        Intel License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright( C) 2000, Intel Corporation, all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of Intel Corporation may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| //(including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort(including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| /*
 | ||||
|   definition of the current version of OpenCV | ||||
|   Usefull to test in user programs | ||||
| */ | ||||
| 
 | ||||
| #ifndef __OPENCV_VERSION_HPP__ | ||||
| #define __OPENCV_VERSION_HPP__ | ||||
| 
 | ||||
| #define CV_VERSION_EPOCH    2 | ||||
| #define CV_VERSION_MAJOR    4 | ||||
| #define CV_VERSION_MINOR    13 | ||||
| #define CV_VERSION_REVISION 6 | ||||
| 
 | ||||
| #define CVAUX_STR_EXP(__A)  #__A | ||||
| #define CVAUX_STR(__A)      CVAUX_STR_EXP(__A) | ||||
| 
 | ||||
| #define CVAUX_STRW_EXP(__A)  L ## #__A | ||||
| #define CVAUX_STRW(__A)      CVAUX_STRW_EXP(__A) | ||||
| 
 | ||||
| #if CV_VERSION_REVISION | ||||
| #  define CV_VERSION        CVAUX_STR(CV_VERSION_EPOCH) "." CVAUX_STR(CV_VERSION_MAJOR) "." CVAUX_STR(CV_VERSION_MINOR) "." CVAUX_STR(CV_VERSION_REVISION) | ||||
| #else | ||||
| #  define CV_VERSION        CVAUX_STR(CV_VERSION_EPOCH) "." CVAUX_STR(CV_VERSION_MAJOR) "." CVAUX_STR(CV_VERSION_MINOR) | ||||
| #endif | ||||
| 
 | ||||
| /* old  style version constants*/ | ||||
| #define CV_MAJOR_VERSION    CV_VERSION_EPOCH | ||||
| #define CV_MINOR_VERSION    CV_VERSION_MAJOR | ||||
| #define CV_SUBMINOR_VERSION CV_VERSION_MINOR | ||||
| 
 | ||||
| #endif | ||||
| @ -1,621 +0,0 @@ | ||||
| ///////////////////////////////////////////////////////////////////////////////
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to
 | ||||
| //  this license.  If you do not agree to this license, do not download,
 | ||||
| //  install, copy or use the software.
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2008, Google, all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without
 | ||||
| // modification, are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //  * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //  * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //  * The name of Intel Corporation or contributors may not be used to endorse
 | ||||
| //     or promote products derived from this software without specific
 | ||||
| //     prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is"
 | ||||
| // and any express or implied warranties, including, but not limited to, the
 | ||||
| // implied warranties of merchantability and fitness for a particular purpose
 | ||||
| // are disclaimed. In no event shall the Intel Corporation or contributors be
 | ||||
| // liable for any direct, indirect, incidental, special, exemplary, or
 | ||||
| // consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| 
 | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| // Image class which provides a thin layer around an IplImage.  The goals
 | ||||
| // of the class design are:
 | ||||
| //    1. All the data has explicit ownership to avoid memory leaks
 | ||||
| //    2. No hidden allocations or copies for performance.
 | ||||
| //    3. Easy access to OpenCV methods (which will access IPP if available)
 | ||||
| //    4. Can easily treat external data as an image
 | ||||
| //    5. Easy to create images which are subsets of other images
 | ||||
| //    6. Fast pixel access which can take advantage of number of channels
 | ||||
| //          if known at compile time.
 | ||||
| //
 | ||||
| // The WImage class is the image class which provides the data accessors.
 | ||||
| // The 'W' comes from the fact that it is also a wrapper around the popular
 | ||||
| // but inconvenient IplImage class. A WImage can be constructed either using a
 | ||||
| // WImageBuffer class which allocates and frees the data,
 | ||||
| // or using a WImageView class which constructs a subimage or a view into
 | ||||
| // external data.  The view class does no memory management.  Each class
 | ||||
| // actually has two versions, one when the number of channels is known at
 | ||||
| // compile time and one when it isn't.  Using the one with the number of
 | ||||
| // channels specified can provide some compile time optimizations by using the
 | ||||
| // fact that the number of channels is a constant.
 | ||||
| //
 | ||||
| // We use the convention (c,r) to refer to column c and row r with (0,0) being
 | ||||
| // the upper left corner.  This is similar to standard Euclidean coordinates
 | ||||
| // with the first coordinate varying in the horizontal direction and the second
 | ||||
| // coordinate varying in the vertical direction.
 | ||||
| // Thus (c,r) is usually in the domain [0, width) X [0, height)
 | ||||
| //
 | ||||
| // Example usage:
 | ||||
| // WImageBuffer3_b  im(5,7);  // Make a 5X7 3 channel image of type uchar
 | ||||
| // WImageView3_b  sub_im(im, 2,2, 3,3); // 3X3 submatrix
 | ||||
| // vector<float> vec(10, 3.0f);
 | ||||
| // WImageView1_f user_im(&vec[0], 2, 5);  // 2X5 image w/ supplied data
 | ||||
| //
 | ||||
| // im.SetZero();  // same as cvSetZero(im.Ipl())
 | ||||
| // *im(2, 3) = 15;  // Modify the element at column 2, row 3
 | ||||
| // MySetRand(&sub_im);
 | ||||
| //
 | ||||
| // // Copy the second row into the first.  This can be done with no memory
 | ||||
| // // allocation and will use SSE if IPP is available.
 | ||||
| // int w = im.Width();
 | ||||
| // im.View(0,0, w,1).CopyFrom(im.View(0,1, w,1));
 | ||||
| //
 | ||||
| // // Doesn't care about source of data since using WImage
 | ||||
| // void MySetRand(WImage_b* im) { // Works with any number of channels
 | ||||
| //   for (int r = 0; r < im->Height(); ++r) {
 | ||||
| //     float* row = im->Row(r);
 | ||||
| //     for (int c = 0; c < im->Width(); ++c) {
 | ||||
| //        for (int ch = 0; ch < im->Channels(); ++ch, ++row) {
 | ||||
| //          *row = uchar(rand() & 255);
 | ||||
| //        }
 | ||||
| //     }
 | ||||
| //   }
 | ||||
| // }
 | ||||
| //
 | ||||
| // Functions that are not part of the basic image allocation, viewing, and
 | ||||
| // access should come from OpenCV, except some useful functions that are not
 | ||||
| // part of OpenCV can be found in wimage_util.h
 | ||||
| #ifndef __OPENCV_CORE_WIMAGE_HPP__ | ||||
| #define __OPENCV_CORE_WIMAGE_HPP__ | ||||
| 
 | ||||
| #include "opencv2/core/core_c.h" | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| namespace cv { | ||||
| 
 | ||||
| template <typename T> class WImage; | ||||
| template <typename T> class WImageBuffer; | ||||
| template <typename T> class WImageView; | ||||
| 
 | ||||
| template<typename T, int C> class WImageC; | ||||
| template<typename T, int C> class WImageBufferC; | ||||
| template<typename T, int C> class WImageViewC; | ||||
| 
 | ||||
| // Commonly used typedefs.
 | ||||
| typedef WImage<uchar>            WImage_b; | ||||
| typedef WImageView<uchar>        WImageView_b; | ||||
| typedef WImageBuffer<uchar>      WImageBuffer_b; | ||||
| 
 | ||||
| typedef WImageC<uchar, 1>        WImage1_b; | ||||
| typedef WImageViewC<uchar, 1>    WImageView1_b; | ||||
| typedef WImageBufferC<uchar, 1>  WImageBuffer1_b; | ||||
| 
 | ||||
| typedef WImageC<uchar, 3>        WImage3_b; | ||||
| typedef WImageViewC<uchar, 3>    WImageView3_b; | ||||
| typedef WImageBufferC<uchar, 3>  WImageBuffer3_b; | ||||
| 
 | ||||
| typedef WImage<float>            WImage_f; | ||||
| typedef WImageView<float>        WImageView_f; | ||||
| typedef WImageBuffer<float>      WImageBuffer_f; | ||||
| 
 | ||||
| typedef WImageC<float, 1>        WImage1_f; | ||||
| typedef WImageViewC<float, 1>    WImageView1_f; | ||||
| typedef WImageBufferC<float, 1>  WImageBuffer1_f; | ||||
| 
 | ||||
| typedef WImageC<float, 3>        WImage3_f; | ||||
| typedef WImageViewC<float, 3>    WImageView3_f; | ||||
| typedef WImageBufferC<float, 3>  WImageBuffer3_f; | ||||
| 
 | ||||
| // There isn't a standard for signed and unsigned short so be more
 | ||||
| // explicit in the typename for these cases.
 | ||||
| typedef WImage<short>            WImage_16s; | ||||
| typedef WImageView<short>        WImageView_16s; | ||||
| typedef WImageBuffer<short>      WImageBuffer_16s; | ||||
| 
 | ||||
| typedef WImageC<short, 1>        WImage1_16s; | ||||
| typedef WImageViewC<short, 1>    WImageView1_16s; | ||||
| typedef WImageBufferC<short, 1>  WImageBuffer1_16s; | ||||
| 
 | ||||
| typedef WImageC<short, 3>        WImage3_16s; | ||||
| typedef WImageViewC<short, 3>    WImageView3_16s; | ||||
| typedef WImageBufferC<short, 3>  WImageBuffer3_16s; | ||||
| 
 | ||||
| typedef WImage<ushort>            WImage_16u; | ||||
| typedef WImageView<ushort>        WImageView_16u; | ||||
| typedef WImageBuffer<ushort>      WImageBuffer_16u; | ||||
| 
 | ||||
| typedef WImageC<ushort, 1>        WImage1_16u; | ||||
| typedef WImageViewC<ushort, 1>    WImageView1_16u; | ||||
| typedef WImageBufferC<ushort, 1>  WImageBuffer1_16u; | ||||
| 
 | ||||
| typedef WImageC<ushort, 3>        WImage3_16u; | ||||
| typedef WImageViewC<ushort, 3>    WImageView3_16u; | ||||
| typedef WImageBufferC<ushort, 3>  WImageBuffer3_16u; | ||||
| 
 | ||||
| //
 | ||||
| // WImage definitions
 | ||||
| //
 | ||||
| // This WImage class gives access to the data it refers to.  It can be
 | ||||
| // constructed either by allocating the data with a WImageBuffer class or
 | ||||
| // using the WImageView class to refer to a subimage or outside data.
 | ||||
| template<typename T> | ||||
| class WImage | ||||
| { | ||||
| public: | ||||
|     typedef T BaseType; | ||||
| 
 | ||||
|     // WImage is an abstract class with no other virtual methods so make the
 | ||||
|     // destructor virtual.
 | ||||
|     virtual ~WImage() = 0; | ||||
| 
 | ||||
|     // Accessors
 | ||||
|     IplImage* Ipl() {return image_; } | ||||
|     const IplImage* Ipl() const {return image_; } | ||||
|     T* ImageData() { return reinterpret_cast<T*>(image_->imageData); } | ||||
|     const T* ImageData() const { | ||||
|         return reinterpret_cast<const T*>(image_->imageData); | ||||
|     } | ||||
| 
 | ||||
|     int Width() const {return image_->width; } | ||||
|     int Height() const {return image_->height; } | ||||
| 
 | ||||
|     // WidthStep is the number of bytes to go to the pixel with the next y coord
 | ||||
|     int WidthStep() const {return image_->widthStep; } | ||||
| 
 | ||||
|     int Channels() const {return image_->nChannels; } | ||||
|     int ChannelSize() const {return sizeof(T); }  // number of bytes per channel
 | ||||
| 
 | ||||
|     // Number of bytes per pixel
 | ||||
|     int PixelSize() const {return Channels() * ChannelSize(); } | ||||
| 
 | ||||
|     // Return depth type (e.g. IPL_DEPTH_8U, IPL_DEPTH_32F) which is the number
 | ||||
|     // of bits per channel and with the signed bit set.
 | ||||
|     // This is known at compile time using specializations.
 | ||||
|     int Depth() const; | ||||
| 
 | ||||
|     inline const T* Row(int r) const { | ||||
|         return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep); | ||||
|     } | ||||
| 
 | ||||
|     inline T* Row(int r) { | ||||
|         return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep); | ||||
|     } | ||||
| 
 | ||||
|     // Pixel accessors which returns a pointer to the start of the channel
 | ||||
|     inline T* operator() (int c, int r)  { | ||||
|         return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep) + | ||||
|             c*Channels(); | ||||
|     } | ||||
| 
 | ||||
|     inline const T* operator() (int c, int r) const  { | ||||
|         return reinterpret_cast<T*>(image_->imageData + r*image_->widthStep) + | ||||
|             c*Channels(); | ||||
|     } | ||||
| 
 | ||||
|     // Copy the contents from another image which is just a convenience to cvCopy
 | ||||
|     void CopyFrom(const WImage<T>& src) { cvCopy(src.Ipl(), image_); } | ||||
| 
 | ||||
|     // Set contents to zero which is just a convenient to cvSetZero
 | ||||
|     void SetZero() { cvSetZero(image_); } | ||||
| 
 | ||||
|     // Construct a view into a region of this image
 | ||||
|     WImageView<T> View(int c, int r, int width, int height); | ||||
| 
 | ||||
| protected: | ||||
|     // Disallow copy and assignment
 | ||||
|     WImage(const WImage&); | ||||
|     void operator=(const WImage&); | ||||
| 
 | ||||
|     explicit WImage(IplImage* img) : image_(img) { | ||||
|         assert(!img || img->depth == Depth()); | ||||
|     } | ||||
| 
 | ||||
|     void SetIpl(IplImage* image) { | ||||
|         assert(!image || image->depth == Depth()); | ||||
|         image_ = image; | ||||
|     } | ||||
| 
 | ||||
|     IplImage* image_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Image class when both the pixel type and number of channels
 | ||||
| // are known at compile time.  This wrapper will speed up some of the operations
 | ||||
| // like accessing individual pixels using the () operator.
 | ||||
| template<typename T, int C> | ||||
| class WImageC : public WImage<T> | ||||
| { | ||||
| public: | ||||
|     typedef typename WImage<T>::BaseType BaseType; | ||||
|     enum { kChannels = C }; | ||||
| 
 | ||||
|     explicit WImageC(IplImage* img) : WImage<T>(img) { | ||||
|         assert(!img || img->nChannels == Channels()); | ||||
|     } | ||||
| 
 | ||||
|     // Construct a view into a region of this image
 | ||||
|     WImageViewC<T, C> View(int c, int r, int width, int height); | ||||
| 
 | ||||
|     // Copy the contents from another image which is just a convenience to cvCopy
 | ||||
|     void CopyFrom(const WImageC<T, C>& src) { | ||||
|         cvCopy(src.Ipl(), WImage<T>::image_); | ||||
|     } | ||||
| 
 | ||||
|     // WImageC is an abstract class with no other virtual methods so make the
 | ||||
|     // destructor virtual.
 | ||||
|     virtual ~WImageC() = 0; | ||||
| 
 | ||||
|     int Channels() const {return C; } | ||||
| 
 | ||||
| protected: | ||||
|     // Disallow copy and assignment
 | ||||
|     WImageC(const WImageC&); | ||||
|     void operator=(const WImageC&); | ||||
| 
 | ||||
|     void SetIpl(IplImage* image) { | ||||
|         assert(!image || image->depth == WImage<T>::Depth()); | ||||
|         WImage<T>::SetIpl(image); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // WImageBuffer definitions
 | ||||
| //
 | ||||
| // Image class which owns the data, so it can be allocated and is always
 | ||||
| // freed.  It cannot be copied but can be explicity cloned.
 | ||||
| //
 | ||||
| template<typename T> | ||||
| class WImageBuffer : public WImage<T> | ||||
| { | ||||
| public: | ||||
|     typedef typename WImage<T>::BaseType BaseType; | ||||
| 
 | ||||
|     // Default constructor which creates an object that can be
 | ||||
|     WImageBuffer() : WImage<T>(0) {} | ||||
| 
 | ||||
|     WImageBuffer(int width, int height, int nchannels) : WImage<T>(0) { | ||||
|         Allocate(width, height, nchannels); | ||||
|     } | ||||
| 
 | ||||
|     // Constructor which takes ownership of a given IplImage so releases
 | ||||
|     // the image on destruction.
 | ||||
|     explicit WImageBuffer(IplImage* img) : WImage<T>(img) {} | ||||
| 
 | ||||
|     // Allocate an image.  Does nothing if current size is the same as
 | ||||
|     // the new size.
 | ||||
|     void Allocate(int width, int height, int nchannels); | ||||
| 
 | ||||
|     // Set the data to point to an image, releasing the old data
 | ||||
|     void SetIpl(IplImage* img) { | ||||
|         ReleaseImage(); | ||||
|         WImage<T>::SetIpl(img); | ||||
|     } | ||||
| 
 | ||||
|     // Clone an image which reallocates the image if of a different dimension.
 | ||||
|     void CloneFrom(const WImage<T>& src) { | ||||
|         Allocate(src.Width(), src.Height(), src.Channels()); | ||||
|         CopyFrom(src); | ||||
|     } | ||||
| 
 | ||||
|     ~WImageBuffer() { | ||||
|         ReleaseImage(); | ||||
|     } | ||||
| 
 | ||||
|     // Release the image if it isn't null.
 | ||||
|     void ReleaseImage() { | ||||
|         if (WImage<T>::image_) { | ||||
|             IplImage* image = WImage<T>::image_; | ||||
|             cvReleaseImage(&image); | ||||
|             WImage<T>::SetIpl(0); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     bool IsNull() const {return WImage<T>::image_ == NULL; } | ||||
| 
 | ||||
| private: | ||||
|     // Disallow copy and assignment
 | ||||
|     WImageBuffer(const WImageBuffer&); | ||||
|     void operator=(const WImageBuffer&); | ||||
| }; | ||||
| 
 | ||||
| // Like a WImageBuffer class but when the number of channels is known
 | ||||
| // at compile time.
 | ||||
| template<typename T, int C> | ||||
| class WImageBufferC : public WImageC<T, C> | ||||
| { | ||||
| public: | ||||
|     typedef typename WImage<T>::BaseType BaseType; | ||||
|     enum { kChannels = C }; | ||||
| 
 | ||||
|     // Default constructor which creates an object that can be
 | ||||
|     WImageBufferC() : WImageC<T, C>(0) {} | ||||
| 
 | ||||
|     WImageBufferC(int width, int height) : WImageC<T, C>(0) { | ||||
|         Allocate(width, height); | ||||
|     } | ||||
| 
 | ||||
|     // Constructor which takes ownership of a given IplImage so releases
 | ||||
|     // the image on destruction.
 | ||||
|     explicit WImageBufferC(IplImage* img) : WImageC<T, C>(img) {} | ||||
| 
 | ||||
|     // Allocate an image.  Does nothing if current size is the same as
 | ||||
|     // the new size.
 | ||||
|     void Allocate(int width, int height); | ||||
| 
 | ||||
|     // Set the data to point to an image, releasing the old data
 | ||||
|     void SetIpl(IplImage* img) { | ||||
|         ReleaseImage(); | ||||
|         WImageC<T, C>::SetIpl(img); | ||||
|     } | ||||
| 
 | ||||
|     // Clone an image which reallocates the image if of a different dimension.
 | ||||
|     void CloneFrom(const WImageC<T, C>& src) { | ||||
|         Allocate(src.Width(), src.Height()); | ||||
|         CopyFrom(src); | ||||
|     } | ||||
| 
 | ||||
|     ~WImageBufferC() { | ||||
|         ReleaseImage(); | ||||
|     } | ||||
| 
 | ||||
|     // Release the image if it isn't null.
 | ||||
|     void ReleaseImage() { | ||||
|         if (WImage<T>::image_) { | ||||
|             IplImage* image = WImage<T>::image_; | ||||
|             cvReleaseImage(&image); | ||||
|             WImageC<T, C>::SetIpl(0); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     bool IsNull() const {return WImage<T>::image_ == NULL; } | ||||
| 
 | ||||
| private: | ||||
|     // Disallow copy and assignment
 | ||||
|     WImageBufferC(const WImageBufferC&); | ||||
|     void operator=(const WImageBufferC&); | ||||
| }; | ||||
| 
 | ||||
| //
 | ||||
| // WImageView definitions
 | ||||
| //
 | ||||
| // View into an image class which allows treating a subimage as an image
 | ||||
| // or treating external data as an image
 | ||||
| //
 | ||||
| template<typename T> | ||||
| class WImageView : public WImage<T> | ||||
| { | ||||
| public: | ||||
|     typedef typename WImage<T>::BaseType BaseType; | ||||
| 
 | ||||
|     // Construct a subimage.  No checks are done that the subimage lies
 | ||||
|     // completely inside the original image.
 | ||||
|     WImageView(WImage<T>* img, int c, int r, int width, int height); | ||||
| 
 | ||||
|     // Refer to external data.
 | ||||
|     // If not given width_step assumed to be same as width.
 | ||||
|     WImageView(T* data, int width, int height, int channels, int width_step = -1); | ||||
| 
 | ||||
|     // Refer to external data.  This does NOT take ownership
 | ||||
|     // of the supplied IplImage.
 | ||||
|     WImageView(IplImage* img) : WImage<T>(img) {} | ||||
| 
 | ||||
|     // Copy constructor
 | ||||
|     WImageView(const WImage<T>& img) : WImage<T>(0) { | ||||
|         header_ = *(img.Ipl()); | ||||
|         WImage<T>::SetIpl(&header_); | ||||
|     } | ||||
| 
 | ||||
|     WImageView& operator=(const WImage<T>& img) { | ||||
|         header_ = *(img.Ipl()); | ||||
|         WImage<T>::SetIpl(&header_); | ||||
|         return *this; | ||||
|     } | ||||
| 
 | ||||
| protected: | ||||
|     IplImage header_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| template<typename T, int C> | ||||
| class WImageViewC : public WImageC<T, C> | ||||
| { | ||||
| public: | ||||
|     typedef typename WImage<T>::BaseType BaseType; | ||||
|     enum { kChannels = C }; | ||||
| 
 | ||||
|     // Default constructor needed for vectors of views.
 | ||||
|     WImageViewC(); | ||||
| 
 | ||||
|     virtual ~WImageViewC() {} | ||||
| 
 | ||||
|     // Construct a subimage.  No checks are done that the subimage lies
 | ||||
|     // completely inside the original image.
 | ||||
|     WImageViewC(WImageC<T, C>* img, | ||||
|         int c, int r, int width, int height); | ||||
| 
 | ||||
|     // Refer to external data
 | ||||
|     WImageViewC(T* data, int width, int height, int width_step = -1); | ||||
| 
 | ||||
|     // Refer to external data.  This does NOT take ownership
 | ||||
|     // of the supplied IplImage.
 | ||||
|     WImageViewC(IplImage* img) : WImageC<T, C>(img) {} | ||||
| 
 | ||||
|     // Copy constructor which does a shallow copy to allow multiple views
 | ||||
|     // of same data.  gcc-4.1.1 gets confused if both versions of
 | ||||
|     // the constructor and assignment operator are not provided.
 | ||||
|     WImageViewC(const WImageC<T, C>& img) : WImageC<T, C>(0) { | ||||
|         header_ = *(img.Ipl()); | ||||
|         WImageC<T, C>::SetIpl(&header_); | ||||
|     } | ||||
|     WImageViewC(const WImageViewC<T, C>& img) : WImageC<T, C>(0) { | ||||
|         header_ = *(img.Ipl()); | ||||
|         WImageC<T, C>::SetIpl(&header_); | ||||
|     } | ||||
| 
 | ||||
|     WImageViewC& operator=(const WImageC<T, C>& img) { | ||||
|         header_ = *(img.Ipl()); | ||||
|         WImageC<T, C>::SetIpl(&header_); | ||||
|         return *this; | ||||
|     } | ||||
|     WImageViewC& operator=(const WImageViewC<T, C>& img) { | ||||
|         header_ = *(img.Ipl()); | ||||
|         WImageC<T, C>::SetIpl(&header_); | ||||
|         return *this; | ||||
|     } | ||||
| 
 | ||||
| protected: | ||||
|     IplImage header_; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // Specializations for depth
 | ||||
| template<> | ||||
| inline int WImage<uchar>::Depth() const {return IPL_DEPTH_8U; } | ||||
| template<> | ||||
| inline int WImage<signed char>::Depth() const {return IPL_DEPTH_8S; } | ||||
| template<> | ||||
| inline int WImage<short>::Depth() const {return IPL_DEPTH_16S; } | ||||
| template<> | ||||
| inline int WImage<ushort>::Depth() const {return IPL_DEPTH_16U; } | ||||
| template<> | ||||
| inline int WImage<int>::Depth() const {return IPL_DEPTH_32S; } | ||||
| template<> | ||||
| inline int WImage<float>::Depth() const {return IPL_DEPTH_32F; } | ||||
| template<> | ||||
| inline int WImage<double>::Depth() const {return IPL_DEPTH_64F; } | ||||
| 
 | ||||
| //
 | ||||
| // Pure virtual destructors still need to be defined.
 | ||||
| //
 | ||||
| template<typename T> inline WImage<T>::~WImage() {} | ||||
| template<typename T, int C> inline WImageC<T, C>::~WImageC() {} | ||||
| 
 | ||||
| //
 | ||||
| // Allocate ImageData
 | ||||
| //
 | ||||
| template<typename T> | ||||
| inline void WImageBuffer<T>::Allocate(int width, int height, int nchannels) | ||||
| { | ||||
|     if (IsNull() || WImage<T>::Width() != width || | ||||
|         WImage<T>::Height() != height || WImage<T>::Channels() != nchannels) { | ||||
|         ReleaseImage(); | ||||
|         WImage<T>::image_ = cvCreateImage(cvSize(width, height), | ||||
|             WImage<T>::Depth(), nchannels); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| template<typename T, int C> | ||||
| inline void WImageBufferC<T, C>::Allocate(int width, int height) | ||||
| { | ||||
|     if (IsNull() || WImage<T>::Width() != width || WImage<T>::Height() != height) { | ||||
|         ReleaseImage(); | ||||
|         WImageC<T, C>::SetIpl(cvCreateImage(cvSize(width, height),WImage<T>::Depth(), C)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| //
 | ||||
| // ImageView methods
 | ||||
| //
 | ||||
| template<typename T> | ||||
| WImageView<T>::WImageView(WImage<T>* img, int c, int r, int width, int height) | ||||
|         : WImage<T>(0) | ||||
| { | ||||
|     header_ = *(img->Ipl()); | ||||
|     header_.imageData = reinterpret_cast<char*>((*img)(c, r)); | ||||
|     header_.width = width; | ||||
|     header_.height = height; | ||||
|     WImage<T>::SetIpl(&header_); | ||||
| } | ||||
| 
 | ||||
| template<typename T> | ||||
| WImageView<T>::WImageView(T* data, int width, int height, int nchannels, int width_step) | ||||
|           : WImage<T>(0) | ||||
| { | ||||
|     cvInitImageHeader(&header_, cvSize(width, height), WImage<T>::Depth(), nchannels); | ||||
|     header_.imageData = reinterpret_cast<char*>(data); | ||||
|     if (width_step > 0) { | ||||
|         header_.widthStep = width_step; | ||||
|     } | ||||
|     WImage<T>::SetIpl(&header_); | ||||
| } | ||||
| 
 | ||||
| template<typename T, int C> | ||||
| WImageViewC<T, C>::WImageViewC(WImageC<T, C>* img, int c, int r, int width, int height) | ||||
|         : WImageC<T, C>(0) | ||||
| { | ||||
|     header_ = *(img->Ipl()); | ||||
|     header_.imageData = reinterpret_cast<char*>((*img)(c, r)); | ||||
|     header_.width = width; | ||||
|     header_.height = height; | ||||
|     WImageC<T, C>::SetIpl(&header_); | ||||
| } | ||||
| 
 | ||||
| template<typename T, int C> | ||||
| WImageViewC<T, C>::WImageViewC() : WImageC<T, C>(0) { | ||||
|     cvInitImageHeader(&header_, cvSize(0, 0), WImage<T>::Depth(), C); | ||||
|     header_.imageData = reinterpret_cast<char*>(0); | ||||
|     WImageC<T, C>::SetIpl(&header_); | ||||
| } | ||||
| 
 | ||||
| template<typename T, int C> | ||||
| WImageViewC<T, C>::WImageViewC(T* data, int width, int height, int width_step) | ||||
|     : WImageC<T, C>(0) | ||||
| { | ||||
|     cvInitImageHeader(&header_, cvSize(width, height), WImage<T>::Depth(), C); | ||||
|     header_.imageData = reinterpret_cast<char*>(data); | ||||
|     if (width_step > 0) { | ||||
|         header_.widthStep = width_step; | ||||
|     } | ||||
|     WImageC<T, C>::SetIpl(&header_); | ||||
| } | ||||
| 
 | ||||
| // Construct a view into a region of an image
 | ||||
| template<typename T> | ||||
| WImageView<T> WImage<T>::View(int c, int r, int width, int height) { | ||||
|     return WImageView<T>(this, c, r, width, height); | ||||
| } | ||||
| 
 | ||||
| template<typename T, int C> | ||||
| WImageViewC<T, C> WImageC<T, C>::View(int c, int r, int width, int height) { | ||||
|     return WImageViewC<T, C>(this, c, r, width, height); | ||||
| } | ||||
| 
 | ||||
| }  // end of namespace
 | ||||
| 
 | ||||
| #endif // __cplusplus
 | ||||
| 
 | ||||
| #endif | ||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -1,171 +0,0 @@ | ||||
| /*  For iOS video I/O
 | ||||
|  *  by Eduard Feicho on 29/07/12 | ||||
|  *  Copyright 2012. All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are met: | ||||
|  * | ||||
|  * 1. Redistributions of source code must retain the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer in the documentation | ||||
|  *    and/or other materials provided with the distribution. | ||||
|  * 3. The name of the author may not be used to endorse or promote products | ||||
|  *    derived from this software without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED | ||||
|  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||||
|  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO | ||||
|  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
|  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; | ||||
|  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | ||||
|  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||||
|  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | ||||
|  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| #import <UIKit/UIKit.h> | ||||
| #import <Accelerate/Accelerate.h> | ||||
| #import <AVFoundation/AVFoundation.h> | ||||
| #import <ImageIO/ImageIO.h> | ||||
| #include "opencv2/core/core.hpp" | ||||
| 
 | ||||
| /////////////////////////////////////// CvAbstractCamera /////////////////////////////////////
 | ||||
| 
 | ||||
| @class CvAbstractCamera; | ||||
| 
 | ||||
| @interface CvAbstractCamera : NSObject | ||||
| { | ||||
|     AVCaptureSession* captureSession; | ||||
|     AVCaptureConnection* videoCaptureConnection; | ||||
|     AVCaptureVideoPreviewLayer *captureVideoPreviewLayer; | ||||
| 
 | ||||
|     UIDeviceOrientation currentDeviceOrientation; | ||||
| 
 | ||||
|     BOOL cameraAvailable; | ||||
|     BOOL captureSessionLoaded; | ||||
|     BOOL running; | ||||
|     BOOL useAVCaptureVideoPreviewLayer; | ||||
| 
 | ||||
|     AVCaptureDevicePosition defaultAVCaptureDevicePosition; | ||||
|     AVCaptureVideoOrientation defaultAVCaptureVideoOrientation; | ||||
|     NSString *const defaultAVCaptureSessionPreset; | ||||
| 
 | ||||
|     int defaultFPS; | ||||
| 
 | ||||
|     UIView* parentView; | ||||
| 
 | ||||
|     int imageWidth; | ||||
|     int imageHeight; | ||||
| } | ||||
| 
 | ||||
| @property (nonatomic, retain) AVCaptureSession* captureSession; | ||||
| @property (nonatomic, retain) AVCaptureConnection* videoCaptureConnection; | ||||
| 
 | ||||
| @property (nonatomic, readonly) BOOL running; | ||||
| @property (nonatomic, readonly) BOOL captureSessionLoaded; | ||||
| 
 | ||||
| @property (nonatomic, assign) int defaultFPS; | ||||
| @property (nonatomic, readonly) AVCaptureVideoPreviewLayer *captureVideoPreviewLayer; | ||||
| @property (nonatomic, assign) AVCaptureDevicePosition defaultAVCaptureDevicePosition; | ||||
| @property (nonatomic, assign) AVCaptureVideoOrientation defaultAVCaptureVideoOrientation; | ||||
| @property (nonatomic, assign) BOOL useAVCaptureVideoPreviewLayer; | ||||
| @property (nonatomic, strong) NSString *const defaultAVCaptureSessionPreset; | ||||
| 
 | ||||
| @property (nonatomic, assign) int imageWidth; | ||||
| @property (nonatomic, assign) int imageHeight; | ||||
| 
 | ||||
| @property (nonatomic, retain) UIView* parentView; | ||||
| 
 | ||||
| - (void)start; | ||||
| - (void)stop; | ||||
| - (void)switchCameras; | ||||
| 
 | ||||
| - (id)initWithParentView:(UIView*)parent; | ||||
| 
 | ||||
| - (void)createCaptureOutput; | ||||
| - (void)createVideoPreviewLayer; | ||||
| - (void)updateOrientation; | ||||
| 
 | ||||
| - (void)lockFocus; | ||||
| - (void)unlockFocus; | ||||
| - (void)lockExposure; | ||||
| - (void)unlockExposure; | ||||
| - (void)lockBalance; | ||||
| - (void)unlockBalance; | ||||
| 
 | ||||
| @end | ||||
| 
 | ||||
| ///////////////////////////////// CvVideoCamera ///////////////////////////////////////////
 | ||||
| 
 | ||||
| @class CvVideoCamera; | ||||
| 
 | ||||
| @protocol CvVideoCameraDelegate <NSObject> | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| // delegate method for processing image frames
 | ||||
| - (void)processImage:(cv::Mat&)image; | ||||
| #endif | ||||
| 
 | ||||
| @end | ||||
| 
 | ||||
| @interface CvVideoCamera : CvAbstractCamera<AVCaptureVideoDataOutputSampleBufferDelegate> | ||||
| { | ||||
|     AVCaptureVideoDataOutput *videoDataOutput; | ||||
| 
 | ||||
|     dispatch_queue_t videoDataOutputQueue; | ||||
|     CALayer *customPreviewLayer; | ||||
| 
 | ||||
|     BOOL grayscaleMode; | ||||
| 
 | ||||
|     BOOL recordVideo; | ||||
|     BOOL rotateVideo; | ||||
|     AVAssetWriterInput* recordAssetWriterInput; | ||||
|     AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor; | ||||
|     AVAssetWriter* recordAssetWriter; | ||||
| 
 | ||||
|     CMTime lastSampleTime; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| @property (nonatomic, assign) id<CvVideoCameraDelegate> delegate; | ||||
| @property (nonatomic, assign) BOOL grayscaleMode; | ||||
| 
 | ||||
| @property (nonatomic, assign) BOOL recordVideo; | ||||
| @property (nonatomic, assign) BOOL rotateVideo; | ||||
| @property (nonatomic, retain) AVAssetWriterInput* recordAssetWriterInput; | ||||
| @property (nonatomic, retain) AVAssetWriterInputPixelBufferAdaptor* recordPixelBufferAdaptor; | ||||
| @property (nonatomic, retain) AVAssetWriter* recordAssetWriter; | ||||
| 
 | ||||
| - (void)adjustLayoutToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; | ||||
| - (void)layoutPreviewLayer; | ||||
| - (void)saveVideo; | ||||
| - (NSURL *)videoFileURL; | ||||
| - (NSString *)videoFileString; | ||||
| 
 | ||||
| 
 | ||||
| @end | ||||
| 
 | ||||
| ///////////////////////////////// CvPhotoCamera ///////////////////////////////////////////
 | ||||
| 
 | ||||
| @class CvPhotoCamera; | ||||
| 
 | ||||
| @protocol CvPhotoCameraDelegate <NSObject> | ||||
| 
 | ||||
| - (void)photoCamera:(CvPhotoCamera*)photoCamera capturedImage:(UIImage *)image; | ||||
| - (void)photoCameraCancel:(CvPhotoCamera*)photoCamera; | ||||
| 
 | ||||
| @end | ||||
| 
 | ||||
| @interface CvPhotoCamera : CvAbstractCamera | ||||
| { | ||||
|     AVCaptureStillImageOutput *stillImageOutput; | ||||
| } | ||||
| 
 | ||||
| @property (nonatomic, assign) id<CvPhotoCameraDelegate> delegate; | ||||
| 
 | ||||
| - (void)takePicture; | ||||
| 
 | ||||
| @end | ||||
| @ -1,255 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                          License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_HIGHGUI_HPP__ | ||||
| #define __OPENCV_HIGHGUI_HPP__ | ||||
| 
 | ||||
| #include "opencv2/core/core.hpp" | ||||
| #include "opencv2/highgui/highgui_c.h" | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| 
 | ||||
| struct CvCapture; | ||||
| struct CvVideoWriter; | ||||
| 
 | ||||
| namespace cv | ||||
| { | ||||
| 
 | ||||
| enum { | ||||
|     // Flags for namedWindow
 | ||||
|     WINDOW_NORMAL   = CV_WINDOW_NORMAL,   // the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size
 | ||||
|     WINDOW_AUTOSIZE = CV_WINDOW_AUTOSIZE, // the user cannot resize the window, the size is constrainted by the image displayed
 | ||||
|     WINDOW_OPENGL   = CV_WINDOW_OPENGL,   // window with opengl support
 | ||||
| 
 | ||||
|     // Flags for set / getWindowProperty
 | ||||
|     WND_PROP_FULLSCREEN   = CV_WND_PROP_FULLSCREEN,  // fullscreen property
 | ||||
|     WND_PROP_AUTOSIZE     = CV_WND_PROP_AUTOSIZE,    // autosize property
 | ||||
|     WND_PROP_ASPECT_RATIO = CV_WND_PROP_ASPECTRATIO, // window's aspect ration
 | ||||
|     WND_PROP_OPENGL       = CV_WND_PROP_OPENGL       // opengl support
 | ||||
| }; | ||||
| 
 | ||||
| CV_EXPORTS_W void namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE); | ||||
| CV_EXPORTS_W void destroyWindow(const string& winname); | ||||
| CV_EXPORTS_W void destroyAllWindows(); | ||||
| 
 | ||||
| CV_EXPORTS_W int startWindowThread(); | ||||
| 
 | ||||
| CV_EXPORTS_W int waitKey(int delay = 0); | ||||
| 
 | ||||
| CV_EXPORTS_W void imshow(const string& winname, InputArray mat); | ||||
| 
 | ||||
| CV_EXPORTS_W void resizeWindow(const string& winname, int width, int height); | ||||
| CV_EXPORTS_W void moveWindow(const string& winname, int x, int y); | ||||
| 
 | ||||
| CV_EXPORTS_W void setWindowProperty(const string& winname, int prop_id, double prop_value);//YV
 | ||||
| CV_EXPORTS_W double getWindowProperty(const string& winname, int prop_id);//YV
 | ||||
| 
 | ||||
| enum
 | ||||
| { | ||||
|     EVENT_MOUSEMOVE      =0, | ||||
|     EVENT_LBUTTONDOWN    =1, | ||||
|     EVENT_RBUTTONDOWN    =2, | ||||
|     EVENT_MBUTTONDOWN    =3, | ||||
|     EVENT_LBUTTONUP      =4, | ||||
|     EVENT_RBUTTONUP      =5, | ||||
|     EVENT_MBUTTONUP      =6, | ||||
|     EVENT_LBUTTONDBLCLK  =7, | ||||
|     EVENT_RBUTTONDBLCLK  =8, | ||||
|     EVENT_MBUTTONDBLCLK  =9 | ||||
| }; | ||||
| 
 | ||||
| enum
 | ||||
| { | ||||
|     EVENT_FLAG_LBUTTON   =1, | ||||
|     EVENT_FLAG_RBUTTON   =2, | ||||
|     EVENT_FLAG_MBUTTON   =4, | ||||
|     EVENT_FLAG_CTRLKEY   =8, | ||||
|     EVENT_FLAG_SHIFTKEY  =16, | ||||
|     EVENT_FLAG_ALTKEY    =32 | ||||
| }; | ||||
| 
 | ||||
| typedef void (*MouseCallback)(int event, int x, int y, int flags, void* userdata); | ||||
| 
 | ||||
| //! assigns callback for mouse events
 | ||||
| CV_EXPORTS void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata = 0); | ||||
| 
 | ||||
| 
 | ||||
| typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata); | ||||
| 
 | ||||
| CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname, | ||||
|                               int* value, int count, | ||||
|                               TrackbarCallback onChange = 0, | ||||
|                               void* userdata = 0); | ||||
| 
 | ||||
| CV_EXPORTS_W int getTrackbarPos(const string& trackbarname, const string& winname); | ||||
| CV_EXPORTS_W void setTrackbarPos(const string& trackbarname, const string& winname, int pos); | ||||
| 
 | ||||
| // OpenGL support
 | ||||
| 
 | ||||
| typedef void (*OpenGlDrawCallback)(void* userdata); | ||||
| CV_EXPORTS void setOpenGlDrawCallback(const string& winname, OpenGlDrawCallback onOpenGlDraw, void* userdata = 0); | ||||
| 
 | ||||
| CV_EXPORTS void setOpenGlContext(const string& winname); | ||||
| 
 | ||||
| CV_EXPORTS void updateWindow(const string& winname); | ||||
| 
 | ||||
| // < Deperecated
 | ||||
| CV_EXPORTS void pointCloudShow(const string& winname, const GlCamera& camera, const GlArrays& arr); | ||||
| CV_EXPORTS void pointCloudShow(const string& winname, const GlCamera& camera, InputArray points, InputArray colors = noArray()); | ||||
| // >
 | ||||
| 
 | ||||
| //Only for Qt
 | ||||
| 
 | ||||
| CV_EXPORTS CvFont fontQt(const string& nameFont, int pointSize=-1, | ||||
|                          Scalar color=Scalar::all(0), int weight=CV_FONT_NORMAL, | ||||
|                          int style=CV_STYLE_NORMAL, int spacing=0); | ||||
| CV_EXPORTS void addText( const Mat& img, const string& text, Point org, CvFont font); | ||||
| 
 | ||||
| CV_EXPORTS void displayOverlay(const string& winname, const string& text, int delayms CV_DEFAULT(0)); | ||||
| CV_EXPORTS void displayStatusBar(const string& winname, const string& text, int delayms CV_DEFAULT(0)); | ||||
| 
 | ||||
| CV_EXPORTS void saveWindowParameters(const string& windowName); | ||||
| CV_EXPORTS void loadWindowParameters(const string& windowName); | ||||
| CV_EXPORTS  int startLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]); | ||||
| CV_EXPORTS  void stopLoop(); | ||||
| 
 | ||||
| typedef void (CV_CDECL *ButtonCallback)(int state, void* userdata); | ||||
| CV_EXPORTS int createButton( const string& bar_name, ButtonCallback on_change, | ||||
|                              void* userdata=NULL, int type=CV_PUSH_BUTTON, | ||||
|                              bool initial_button_state=0); | ||||
| 
 | ||||
| //-------------------------
 | ||||
| 
 | ||||
| enum
 | ||||
| { | ||||
|     // 8bit, color or not
 | ||||
|     IMREAD_UNCHANGED  =-1, | ||||
|     // 8bit, gray
 | ||||
|     IMREAD_GRAYSCALE  =0, | ||||
|     // ?, color
 | ||||
|     IMREAD_COLOR      =1, | ||||
|     // any depth, ?
 | ||||
|     IMREAD_ANYDEPTH   =2, | ||||
|     // ?, any color
 | ||||
|     IMREAD_ANYCOLOR   =4 | ||||
| }; | ||||
| 
 | ||||
| enum
 | ||||
| { | ||||
|     IMWRITE_JPEG_QUALITY =1, | ||||
|     IMWRITE_PNG_COMPRESSION =16, | ||||
|     IMWRITE_PNG_STRATEGY =17, | ||||
|     IMWRITE_PNG_BILEVEL =18, | ||||
|     IMWRITE_PNG_STRATEGY_DEFAULT =0, | ||||
|     IMWRITE_PNG_STRATEGY_FILTERED =1, | ||||
|     IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2, | ||||
|     IMWRITE_PNG_STRATEGY_RLE =3, | ||||
|     IMWRITE_PNG_STRATEGY_FIXED =4, | ||||
|     IMWRITE_PXM_BINARY =32 | ||||
| }; | ||||
| 
 | ||||
| CV_EXPORTS_W Mat imread( const string& filename, int flags=1 ); | ||||
| CV_EXPORTS_W bool imwrite( const string& filename, InputArray img, | ||||
|               const vector<int>& params=vector<int>()); | ||||
| CV_EXPORTS_W Mat imdecode( InputArray buf, int flags ); | ||||
| CV_EXPORTS Mat imdecode( InputArray buf, int flags, Mat* dst ); | ||||
| CV_EXPORTS_W bool imencode( const string& ext, InputArray img, | ||||
|                             CV_OUT vector<uchar>& buf, | ||||
|                             const vector<int>& params=vector<int>()); | ||||
| 
 | ||||
| #ifndef CV_NO_VIDEO_CAPTURE_CPP_API | ||||
| 
 | ||||
| template<> void CV_EXPORTS Ptr<CvCapture>::delete_obj(); | ||||
| template<> void CV_EXPORTS Ptr<CvVideoWriter>::delete_obj(); | ||||
| 
 | ||||
| class CV_EXPORTS_W VideoCapture | ||||
| { | ||||
| public: | ||||
|     CV_WRAP VideoCapture(); | ||||
|     CV_WRAP VideoCapture(const string& filename); | ||||
|     CV_WRAP VideoCapture(int device); | ||||
| 
 | ||||
|     virtual ~VideoCapture(); | ||||
|     CV_WRAP virtual bool open(const string& filename); | ||||
|     CV_WRAP virtual bool open(int device); | ||||
|     CV_WRAP virtual bool isOpened() const; | ||||
|     CV_WRAP virtual void release(); | ||||
| 
 | ||||
|     CV_WRAP virtual bool grab(); | ||||
|     CV_WRAP virtual bool retrieve(CV_OUT Mat& image, int channel=0); | ||||
|     virtual VideoCapture& operator >> (CV_OUT Mat& image); | ||||
|     CV_WRAP virtual bool read(CV_OUT Mat& image); | ||||
| 
 | ||||
|     CV_WRAP virtual bool set(int propId, double value); | ||||
|     CV_WRAP virtual double get(int propId); | ||||
| 
 | ||||
| protected: | ||||
|     Ptr<CvCapture> cap; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| class CV_EXPORTS_W VideoWriter | ||||
| { | ||||
| public: | ||||
|     CV_WRAP VideoWriter(); | ||||
|     CV_WRAP VideoWriter(const string& filename, int fourcc, double fps, | ||||
|                 Size frameSize, bool isColor=true); | ||||
| 
 | ||||
|     virtual ~VideoWriter(); | ||||
|     CV_WRAP virtual bool open(const string& filename, int fourcc, double fps, | ||||
|                       Size frameSize, bool isColor=true); | ||||
|     CV_WRAP virtual bool isOpened() const; | ||||
|     CV_WRAP virtual void release(); | ||||
|     virtual VideoWriter& operator << (const Mat& image); | ||||
|     CV_WRAP virtual void write(const Mat& image); | ||||
| 
 | ||||
| protected: | ||||
|     Ptr<CvVideoWriter> writer; | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| @ -1,660 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                        Intel License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000, Intel Corporation, all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of Intel Corporation may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_HIGHGUI_H__ | ||||
| #define __OPENCV_HIGHGUI_H__ | ||||
| 
 | ||||
| #include "opencv2/core/core_c.h" | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif /* __cplusplus */ | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                                  Basic GUI functions                                   * | ||||
| \****************************************************************************************/ | ||||
| //YV
 | ||||
| //-----------New for Qt
 | ||||
| /* For font */ | ||||
| enum {  CV_FONT_LIGHT           = 25,//QFont::Light,
 | ||||
|         CV_FONT_NORMAL          = 50,//QFont::Normal,
 | ||||
|         CV_FONT_DEMIBOLD        = 63,//QFont::DemiBold,
 | ||||
|         CV_FONT_BOLD            = 75,//QFont::Bold,
 | ||||
|         CV_FONT_BLACK           = 87 //QFont::Black
 | ||||
| }; | ||||
| 
 | ||||
| enum {  CV_STYLE_NORMAL         = 0,//QFont::StyleNormal,
 | ||||
|         CV_STYLE_ITALIC         = 1,//QFont::StyleItalic,
 | ||||
|         CV_STYLE_OBLIQUE        = 2 //QFont::StyleOblique
 | ||||
| }; | ||||
| /* ---------*/ | ||||
| 
 | ||||
| //for color cvScalar(blue_component, green_component, red\_component[, alpha_component])
 | ||||
| //and alpha= 0 <-> 0xFF (not transparent <-> transparent)
 | ||||
| CVAPI(CvFont) cvFontQt(const char* nameFont, int pointSize CV_DEFAULT(-1), CvScalar color CV_DEFAULT(cvScalarAll(0)), int weight CV_DEFAULT(CV_FONT_NORMAL),  int style CV_DEFAULT(CV_STYLE_NORMAL), int spacing CV_DEFAULT(0)); | ||||
| 
 | ||||
| CVAPI(void) cvAddText(const CvArr* img, const char* text, CvPoint org, CvFont *arg2); | ||||
| 
 | ||||
| CVAPI(void) cvDisplayOverlay(const char* name, const char* text, int delayms CV_DEFAULT(0)); | ||||
| CVAPI(void) cvDisplayStatusBar(const char* name, const char* text, int delayms CV_DEFAULT(0)); | ||||
| 
 | ||||
| CVAPI(void) cvSaveWindowParameters(const char* name); | ||||
| CVAPI(void) cvLoadWindowParameters(const char* name); | ||||
| CVAPI(int) cvStartLoop(int (*pt2Func)(int argc, char *argv[]), int argc, char* argv[]); | ||||
| CVAPI(void) cvStopLoop( void ); | ||||
| 
 | ||||
| typedef void (CV_CDECL *CvButtonCallback)(int state, void* userdata); | ||||
| enum {CV_PUSH_BUTTON = 0, CV_CHECKBOX = 1, CV_RADIOBOX = 2}; | ||||
| CVAPI(int) cvCreateButton( const char* button_name CV_DEFAULT(NULL),CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL) , int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0)); | ||||
| //----------------------
 | ||||
| 
 | ||||
| 
 | ||||
| /* this function is used to set some external parameters in case of X Window */ | ||||
| CVAPI(int) cvInitSystem( int argc, char** argv ); | ||||
| 
 | ||||
| CVAPI(int) cvStartWindowThread( void ); | ||||
| 
 | ||||
| // ---------  YV ---------
 | ||||
| enum | ||||
| { | ||||
|     //These 3 flags are used by cvSet/GetWindowProperty
 | ||||
|     CV_WND_PROP_FULLSCREEN = 0, //to change/get window's fullscreen property
 | ||||
|     CV_WND_PROP_AUTOSIZE   = 1, //to change/get window's autosize property
 | ||||
|     CV_WND_PROP_ASPECTRATIO= 2, //to change/get window's aspectratio property
 | ||||
|     CV_WND_PROP_OPENGL     = 3, //to change/get window's opengl support
 | ||||
| 
 | ||||
|     //These 2 flags are used by cvNamedWindow and cvSet/GetWindowProperty
 | ||||
|     CV_WINDOW_NORMAL       = 0x00000000, //the user can resize the window (no constraint)  / also use to switch a fullscreen window to a normal size
 | ||||
|     CV_WINDOW_AUTOSIZE     = 0x00000001, //the user cannot resize the window, the size is constrainted by the image displayed
 | ||||
|     CV_WINDOW_OPENGL       = 0x00001000, //window with opengl support
 | ||||
| 
 | ||||
|     //Those flags are only for Qt
 | ||||
|     CV_GUI_EXPANDED         = 0x00000000, //status bar and tool bar
 | ||||
|     CV_GUI_NORMAL           = 0x00000010, //old fashious way
 | ||||
| 
 | ||||
|     //These 3 flags are used by cvNamedWindow and cvSet/GetWindowProperty
 | ||||
|     CV_WINDOW_FULLSCREEN   = 1,//change the window to fullscreen
 | ||||
|     CV_WINDOW_FREERATIO    = 0x00000100,//the image expends as much as it can (no ratio constraint)
 | ||||
|     CV_WINDOW_KEEPRATIO    = 0x00000000//the ration image is respected.
 | ||||
| }; | ||||
| 
 | ||||
| /* create window */ | ||||
| CVAPI(int) cvNamedWindow( const char* name, int flags CV_DEFAULT(CV_WINDOW_AUTOSIZE) ); | ||||
| 
 | ||||
| /* Set and Get Property of the window */ | ||||
| CVAPI(void) cvSetWindowProperty(const char* name, int prop_id, double prop_value); | ||||
| CVAPI(double) cvGetWindowProperty(const char* name, int prop_id); | ||||
| 
 | ||||
| /* display image within window (highgui windows remember their content) */ | ||||
| CVAPI(void) cvShowImage( const char* name, const CvArr* image ); | ||||
| 
 | ||||
| /* resize/move window */ | ||||
| CVAPI(void) cvResizeWindow( const char* name, int width, int height ); | ||||
| CVAPI(void) cvMoveWindow( const char* name, int x, int y ); | ||||
| 
 | ||||
| 
 | ||||
| /* destroy window and all the trackers associated with it */ | ||||
| CVAPI(void) cvDestroyWindow( const char* name ); | ||||
| 
 | ||||
| CVAPI(void) cvDestroyAllWindows(void); | ||||
| 
 | ||||
| /* get native window handle (HWND in case of Win32 and Widget in case of X Window) */ | ||||
| CVAPI(void*) cvGetWindowHandle( const char* name ); | ||||
| 
 | ||||
| /* get name of highgui window given its native handle */ | ||||
| CVAPI(const char*) cvGetWindowName( void* window_handle ); | ||||
| 
 | ||||
| 
 | ||||
| typedef void (CV_CDECL *CvTrackbarCallback)(int pos); | ||||
| 
 | ||||
| /* create trackbar and display it on top of given window, set callback */ | ||||
| CVAPI(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name, | ||||
|                              int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| typedef void (CV_CDECL *CvTrackbarCallback2)(int pos, void* userdata); | ||||
| 
 | ||||
| CVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name, | ||||
|                               int* value, int count, CvTrackbarCallback2 on_change, | ||||
|                               void* userdata CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* retrieve or set trackbar position */ | ||||
| CVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name ); | ||||
| CVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos ); | ||||
| CVAPI(void) cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval); | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     CV_EVENT_MOUSEMOVE      =0, | ||||
|     CV_EVENT_LBUTTONDOWN    =1, | ||||
|     CV_EVENT_RBUTTONDOWN    =2, | ||||
|     CV_EVENT_MBUTTONDOWN    =3, | ||||
|     CV_EVENT_LBUTTONUP      =4, | ||||
|     CV_EVENT_RBUTTONUP      =5, | ||||
|     CV_EVENT_MBUTTONUP      =6, | ||||
|     CV_EVENT_LBUTTONDBLCLK  =7, | ||||
|     CV_EVENT_RBUTTONDBLCLK  =8, | ||||
|     CV_EVENT_MBUTTONDBLCLK  =9 | ||||
| }; | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     CV_EVENT_FLAG_LBUTTON   =1, | ||||
|     CV_EVENT_FLAG_RBUTTON   =2, | ||||
|     CV_EVENT_FLAG_MBUTTON   =4, | ||||
|     CV_EVENT_FLAG_CTRLKEY   =8, | ||||
|     CV_EVENT_FLAG_SHIFTKEY  =16, | ||||
|     CV_EVENT_FLAG_ALTKEY    =32 | ||||
| }; | ||||
| 
 | ||||
| typedef void (CV_CDECL *CvMouseCallback )(int event, int x, int y, int flags, void* param); | ||||
| 
 | ||||
| /* assign callback for mouse events */ | ||||
| CVAPI(void) cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, | ||||
|                                 void* param CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| enum | ||||
| { | ||||
| /* 8bit, color or not */ | ||||
|     CV_LOAD_IMAGE_UNCHANGED  =-1, | ||||
| /* 8bit, gray */ | ||||
|     CV_LOAD_IMAGE_GRAYSCALE  =0, | ||||
| /* ?, color */ | ||||
|     CV_LOAD_IMAGE_COLOR      =1, | ||||
| /* any depth, ? */ | ||||
|     CV_LOAD_IMAGE_ANYDEPTH   =2, | ||||
| /* ?, any color */ | ||||
|     CV_LOAD_IMAGE_ANYCOLOR   =4 | ||||
| }; | ||||
| 
 | ||||
| /* load image from file
 | ||||
|   iscolor can be a combination of above flags where CV_LOAD_IMAGE_UNCHANGED | ||||
|   overrides the other flags | ||||
|   using CV_LOAD_IMAGE_ANYCOLOR alone is equivalent to CV_LOAD_IMAGE_UNCHANGED | ||||
|   unless CV_LOAD_IMAGE_ANYDEPTH is specified images are converted to 8bit | ||||
| */ | ||||
| CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); | ||||
| CVAPI(CvMat*) cvLoadImageM( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     CV_IMWRITE_JPEG_QUALITY =1, | ||||
|     CV_IMWRITE_PNG_COMPRESSION =16, | ||||
|     CV_IMWRITE_PNG_STRATEGY =17, | ||||
|     CV_IMWRITE_PNG_BILEVEL =18, | ||||
|     CV_IMWRITE_PNG_STRATEGY_DEFAULT =0, | ||||
|     CV_IMWRITE_PNG_STRATEGY_FILTERED =1, | ||||
|     CV_IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY =2, | ||||
|     CV_IMWRITE_PNG_STRATEGY_RLE =3, | ||||
|     CV_IMWRITE_PNG_STRATEGY_FIXED =4, | ||||
|     CV_IMWRITE_PXM_BINARY =32 | ||||
| }; | ||||
| 
 | ||||
| /* save image to file */ | ||||
| CVAPI(int) cvSaveImage( const char* filename, const CvArr* image, | ||||
|                         const int* params CV_DEFAULT(0) ); | ||||
| 
 | ||||
| /* decode image stored in the buffer */ | ||||
| CVAPI(IplImage*) cvDecodeImage( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); | ||||
| CVAPI(CvMat*) cvDecodeImageM( const CvMat* buf, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); | ||||
| 
 | ||||
| /* encode image and store the result as a byte vector (single-row 8uC1 matrix) */ | ||||
| CVAPI(CvMat*) cvEncodeImage( const char* ext, const CvArr* image, | ||||
|                              const int* params CV_DEFAULT(0) ); | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     CV_CVTIMG_FLIP      =1, | ||||
|     CV_CVTIMG_SWAP_RB   =2 | ||||
| }; | ||||
| 
 | ||||
| /* utility function: convert one image to another with optional vertical flip */ | ||||
| CVAPI(void) cvConvertImage( const CvArr* src, CvArr* dst, int flags CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* wait for key event infinitely (delay<=0) or for "delay" milliseconds */ | ||||
| CVAPI(int) cvWaitKey(int delay CV_DEFAULT(0)); | ||||
| 
 | ||||
| // OpenGL support
 | ||||
| 
 | ||||
| typedef void (CV_CDECL *CvOpenGlDrawCallback)(void* userdata); | ||||
| CVAPI(void) cvSetOpenGlDrawCallback(const char* window_name, CvOpenGlDrawCallback callback, void* userdata CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| CVAPI(void) cvSetOpenGlContext(const char* window_name); | ||||
| CVAPI(void) cvUpdateWindow(const char* window_name); | ||||
| 
 | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                         Working with Video Files and Cameras                           * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| /* "black box" capture structure */ | ||||
| typedef struct CvCapture CvCapture; | ||||
| 
 | ||||
| /* start capturing frames from video file */ | ||||
| CVAPI(CvCapture*) cvCreateFileCapture( const char* filename ); | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     CV_CAP_ANY      =0,     // autodetect
 | ||||
| 
 | ||||
|     CV_CAP_MIL      =100,   // MIL proprietary drivers
 | ||||
| 
 | ||||
|     CV_CAP_VFW      =200,   // platform native
 | ||||
|     CV_CAP_V4L      =200, | ||||
|     CV_CAP_V4L2     =200, | ||||
| 
 | ||||
|     CV_CAP_FIREWARE =300,   // IEEE 1394 drivers
 | ||||
|     CV_CAP_FIREWIRE =300, | ||||
|     CV_CAP_IEEE1394 =300, | ||||
|     CV_CAP_DC1394   =300, | ||||
|     CV_CAP_CMU1394  =300, | ||||
| 
 | ||||
|     CV_CAP_STEREO   =400,   // TYZX proprietary drivers
 | ||||
|     CV_CAP_TYZX     =400, | ||||
|     CV_TYZX_LEFT    =400, | ||||
|     CV_TYZX_RIGHT   =401, | ||||
|     CV_TYZX_COLOR   =402, | ||||
|     CV_TYZX_Z       =403, | ||||
| 
 | ||||
|     CV_CAP_QT       =500,   // QuickTime
 | ||||
| 
 | ||||
|     CV_CAP_UNICAP   =600,   // Unicap drivers
 | ||||
| 
 | ||||
|     CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)
 | ||||
|     CV_CAP_MSMF     =1400,  // Microsoft Media Foundation (via videoInput)
 | ||||
| 
 | ||||
|     CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK
 | ||||
| 
 | ||||
|     CV_CAP_OPENNI   =900,   // OpenNI (for Kinect)
 | ||||
|     CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)
 | ||||
| 
 | ||||
|     CV_CAP_ANDROID  =1000,  // Android
 | ||||
|     CV_CAP_ANDROID_BACK =CV_CAP_ANDROID+99, // Android back camera
 | ||||
|     CV_CAP_ANDROID_FRONT =CV_CAP_ANDROID+98, // Android front camera
 | ||||
| 
 | ||||
|     CV_CAP_XIAPI    =1100,   // XIMEA Camera API
 | ||||
| 
 | ||||
|     CV_CAP_AVFOUNDATION = 1200,  // AVFoundation framework for iOS (OS X Lion will have the same API)
 | ||||
| 
 | ||||
|     CV_CAP_GIGANETIX = 1300,  // Smartek Giganetix GigEVisionSDK
 | ||||
| 
 | ||||
|     CV_CAP_INTELPERC = 1500 // Intel Perceptual Computing SDK
 | ||||
| }; | ||||
| 
 | ||||
| /* start capturing frames from camera: index = camera_index + domain_offset (CV_CAP_*) */ | ||||
| CVAPI(CvCapture*) cvCreateCameraCapture( int index ); | ||||
| 
 | ||||
| /* grab a frame, return 1 on success, 0 on fail.
 | ||||
|   this function is thought to be fast               */ | ||||
| CVAPI(int) cvGrabFrame( CvCapture* capture ); | ||||
| 
 | ||||
| /* get the frame grabbed with cvGrabFrame(..)
 | ||||
|   This function may apply some frame processing like | ||||
|   frame decompression, flipping etc. | ||||
|   !!!DO NOT RELEASE or MODIFY the retrieved frame!!! */ | ||||
| CVAPI(IplImage*) cvRetrieveFrame( CvCapture* capture, int streamIdx CV_DEFAULT(0) ); | ||||
| 
 | ||||
| /* Just a combination of cvGrabFrame and cvRetrieveFrame
 | ||||
|    !!!DO NOT RELEASE or MODIFY the retrieved frame!!!      */ | ||||
| CVAPI(IplImage*) cvQueryFrame( CvCapture* capture ); | ||||
| 
 | ||||
| /* stop capturing/reading and free resources */ | ||||
| CVAPI(void) cvReleaseCapture( CvCapture** capture ); | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     // modes of the controlling registers (can be: auto, manual, auto single push, absolute Latter allowed with any other mode)
 | ||||
|     // every feature can have only one mode turned on at a time
 | ||||
|     CV_CAP_PROP_DC1394_OFF         = -4,  //turn the feature off (not controlled manually nor automatically)
 | ||||
|     CV_CAP_PROP_DC1394_MODE_MANUAL = -3, //set automatically when a value of the feature is set by the user
 | ||||
|     CV_CAP_PROP_DC1394_MODE_AUTO = -2, | ||||
|     CV_CAP_PROP_DC1394_MODE_ONE_PUSH_AUTO = -1, | ||||
|     CV_CAP_PROP_POS_MSEC       =0, | ||||
|     CV_CAP_PROP_POS_FRAMES     =1, | ||||
|     CV_CAP_PROP_POS_AVI_RATIO  =2, | ||||
|     CV_CAP_PROP_FRAME_WIDTH    =3, | ||||
|     CV_CAP_PROP_FRAME_HEIGHT   =4, | ||||
|     CV_CAP_PROP_FPS            =5, | ||||
|     CV_CAP_PROP_FOURCC         =6, | ||||
|     CV_CAP_PROP_FRAME_COUNT    =7, | ||||
|     CV_CAP_PROP_FORMAT         =8, | ||||
|     CV_CAP_PROP_MODE           =9, | ||||
|     CV_CAP_PROP_BRIGHTNESS    =10, | ||||
|     CV_CAP_PROP_CONTRAST      =11, | ||||
|     CV_CAP_PROP_SATURATION    =12, | ||||
|     CV_CAP_PROP_HUE           =13, | ||||
|     CV_CAP_PROP_GAIN          =14, | ||||
|     CV_CAP_PROP_EXPOSURE      =15, | ||||
|     CV_CAP_PROP_CONVERT_RGB   =16, | ||||
|     CV_CAP_PROP_WHITE_BALANCE_U =17, | ||||
|     CV_CAP_PROP_RECTIFICATION =18, | ||||
|     CV_CAP_PROP_MONOCROME     =19, | ||||
|     CV_CAP_PROP_SHARPNESS     =20, | ||||
|     CV_CAP_PROP_AUTO_EXPOSURE =21, // exposure control done by camera,
 | ||||
|                                    // user can adjust refernce level
 | ||||
|                                    // using this feature
 | ||||
|     CV_CAP_PROP_GAMMA         =22, | ||||
|     CV_CAP_PROP_TEMPERATURE   =23, | ||||
|     CV_CAP_PROP_TRIGGER       =24, | ||||
|     CV_CAP_PROP_TRIGGER_DELAY =25, | ||||
|     CV_CAP_PROP_WHITE_BALANCE_V =26, | ||||
|     CV_CAP_PROP_ZOOM          =27, | ||||
|     CV_CAP_PROP_FOCUS         =28, | ||||
|     CV_CAP_PROP_GUID          =29, | ||||
|     CV_CAP_PROP_ISO_SPEED     =30, | ||||
|     CV_CAP_PROP_MAX_DC1394    =31, | ||||
|     CV_CAP_PROP_BACKLIGHT     =32, | ||||
|     CV_CAP_PROP_PAN           =33, | ||||
|     CV_CAP_PROP_TILT          =34, | ||||
|     CV_CAP_PROP_ROLL          =35, | ||||
|     CV_CAP_PROP_IRIS          =36, | ||||
|     CV_CAP_PROP_SETTINGS      =37, | ||||
|     CV_CAP_PROP_BUFFERSIZE    =38, | ||||
| 
 | ||||
|     CV_CAP_PROP_AUTOGRAB      =1024, // property for highgui class CvCapture_Android only
 | ||||
|     CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING=1025, // readonly, tricky property, returns cpnst char* indeed
 | ||||
|     CV_CAP_PROP_PREVIEW_FORMAT=1026, // readonly, tricky property, returns cpnst char* indeed
 | ||||
| 
 | ||||
|     // OpenNI map generators
 | ||||
|     CV_CAP_OPENNI_DEPTH_GENERATOR = 1 << 31, | ||||
|     CV_CAP_OPENNI_IMAGE_GENERATOR = 1 << 30, | ||||
|     CV_CAP_OPENNI_GENERATORS_MASK = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_OPENNI_IMAGE_GENERATOR, | ||||
| 
 | ||||
|     // Properties of cameras available through OpenNI interfaces
 | ||||
|     CV_CAP_PROP_OPENNI_OUTPUT_MODE     = 100, | ||||
|     CV_CAP_PROP_OPENNI_FRAME_MAX_DEPTH = 101, // in mm
 | ||||
|     CV_CAP_PROP_OPENNI_BASELINE        = 102, // in mm
 | ||||
|     CV_CAP_PROP_OPENNI_FOCAL_LENGTH    = 103, // in pixels
 | ||||
|     CV_CAP_PROP_OPENNI_REGISTRATION    = 104, // flag
 | ||||
|     CV_CAP_PROP_OPENNI_REGISTRATION_ON = CV_CAP_PROP_OPENNI_REGISTRATION, // flag that synchronizes the remapping depth map to image map
 | ||||
|                                                                           // by changing depth generator's view point (if the flag is "on") or
 | ||||
|                                                                           // sets this view point to its normal one (if the flag is "off").
 | ||||
|     CV_CAP_PROP_OPENNI_APPROX_FRAME_SYNC = 105, | ||||
|     CV_CAP_PROP_OPENNI_MAX_BUFFER_SIZE   = 106, | ||||
|     CV_CAP_PROP_OPENNI_CIRCLE_BUFFER     = 107, | ||||
|     CV_CAP_PROP_OPENNI_MAX_TIME_DURATION = 108, | ||||
| 
 | ||||
|     CV_CAP_PROP_OPENNI_GENERATOR_PRESENT = 109, | ||||
| 
 | ||||
|     CV_CAP_OPENNI_IMAGE_GENERATOR_PRESENT         = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_GENERATOR_PRESENT, | ||||
|     CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE     = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_OUTPUT_MODE, | ||||
|     CV_CAP_OPENNI_DEPTH_GENERATOR_BASELINE        = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_BASELINE, | ||||
|     CV_CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH    = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_FOCAL_LENGTH, | ||||
|     CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION    = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION, | ||||
|     CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION, | ||||
| 
 | ||||
|     // Properties of cameras available through GStreamer interface
 | ||||
|     CV_CAP_GSTREAMER_QUEUE_LENGTH   = 200, // default is 1
 | ||||
| 
 | ||||
|     // PVAPI
 | ||||
|     CV_CAP_PROP_PVAPI_MULTICASTIP           = 300, // ip for anable multicast master mode. 0 for disable multicast
 | ||||
|     CV_CAP_PROP_PVAPI_FRAMESTARTTRIGGERMODE = 301, // FrameStartTriggerMode: Determines how a frame is initiated
 | ||||
|     CV_CAP_PROP_PVAPI_DECIMATIONHORIZONTAL  = 302, // Horizontal sub-sampling of the image
 | ||||
|     CV_CAP_PROP_PVAPI_DECIMATIONVERTICAL    = 303, // Vertical sub-sampling of the image
 | ||||
|     CV_CAP_PROP_PVAPI_BINNINGX              = 304, // Horizontal binning factor
 | ||||
|     CV_CAP_PROP_PVAPI_BINNINGY              = 305, // Vertical binning factor
 | ||||
|     CV_CAP_PROP_PVAPI_PIXELFORMAT           = 306, // Pixel format
 | ||||
| 
 | ||||
|     // Properties of cameras available through XIMEA SDK interface
 | ||||
|     CV_CAP_PROP_XI_DOWNSAMPLING  = 400,      // Change image resolution by binning or skipping.
 | ||||
|     CV_CAP_PROP_XI_DATA_FORMAT   = 401,       // Output data format.
 | ||||
|     CV_CAP_PROP_XI_OFFSET_X      = 402,      // Horizontal offset from the origin to the area of interest (in pixels).
 | ||||
|     CV_CAP_PROP_XI_OFFSET_Y      = 403,      // Vertical offset from the origin to the area of interest (in pixels).
 | ||||
|     CV_CAP_PROP_XI_TRG_SOURCE    = 404,      // Defines source of trigger.
 | ||||
|     CV_CAP_PROP_XI_TRG_SOFTWARE  = 405,      // Generates an internal trigger. PRM_TRG_SOURCE must be set to TRG_SOFTWARE.
 | ||||
|     CV_CAP_PROP_XI_GPI_SELECTOR  = 406,      // Selects general purpose input
 | ||||
|     CV_CAP_PROP_XI_GPI_MODE      = 407,      // Set general purpose input mode
 | ||||
|     CV_CAP_PROP_XI_GPI_LEVEL     = 408,      // Get general purpose level
 | ||||
|     CV_CAP_PROP_XI_GPO_SELECTOR  = 409,      // Selects general purpose output
 | ||||
|     CV_CAP_PROP_XI_GPO_MODE      = 410,      // Set general purpose output mode
 | ||||
|     CV_CAP_PROP_XI_LED_SELECTOR  = 411,      // Selects camera signalling LED
 | ||||
|     CV_CAP_PROP_XI_LED_MODE      = 412,      // Define camera signalling LED functionality
 | ||||
|     CV_CAP_PROP_XI_MANUAL_WB     = 413,      // Calculates White Balance(must be called during acquisition)
 | ||||
|     CV_CAP_PROP_XI_AUTO_WB       = 414,      // Automatic white balance
 | ||||
|     CV_CAP_PROP_XI_AEAG          = 415,      // Automatic exposure/gain
 | ||||
|     CV_CAP_PROP_XI_EXP_PRIORITY  = 416,      // Exposure priority (0.5 - exposure 50%, gain 50%).
 | ||||
|     CV_CAP_PROP_XI_AE_MAX_LIMIT  = 417,      // Maximum limit of exposure in AEAG procedure
 | ||||
|     CV_CAP_PROP_XI_AG_MAX_LIMIT  = 418,      // Maximum limit of gain in AEAG procedure
 | ||||
|     CV_CAP_PROP_XI_AEAG_LEVEL    = 419,       // Average intensity of output signal AEAG should achieve(in %)
 | ||||
|     CV_CAP_PROP_XI_TIMEOUT       = 420,       // Image capture timeout in milliseconds
 | ||||
| 
 | ||||
|     // Properties for Android cameras
 | ||||
|     CV_CAP_PROP_ANDROID_FLASH_MODE = 8001, | ||||
|     CV_CAP_PROP_ANDROID_FOCUS_MODE = 8002, | ||||
|     CV_CAP_PROP_ANDROID_WHITE_BALANCE = 8003, | ||||
|     CV_CAP_PROP_ANDROID_ANTIBANDING = 8004, | ||||
|     CV_CAP_PROP_ANDROID_FOCAL_LENGTH = 8005, | ||||
|     CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_NEAR = 8006, | ||||
|     CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_OPTIMAL = 8007, | ||||
|     CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_FAR = 8008, | ||||
|     CV_CAP_PROP_ANDROID_EXPOSE_LOCK = 8009, | ||||
|     CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK = 8010, | ||||
| 
 | ||||
|     // Properties of cameras available through AVFOUNDATION interface
 | ||||
|     CV_CAP_PROP_IOS_DEVICE_FOCUS = 9001, | ||||
|     CV_CAP_PROP_IOS_DEVICE_EXPOSURE = 9002, | ||||
|     CV_CAP_PROP_IOS_DEVICE_FLASH = 9003, | ||||
|     CV_CAP_PROP_IOS_DEVICE_WHITEBALANCE = 9004, | ||||
|     CV_CAP_PROP_IOS_DEVICE_TORCH = 9005, | ||||
| 
 | ||||
|     // Properties of cameras available through Smartek Giganetix Ethernet Vision interface
 | ||||
|     /* --- Vladimir Litvinenko (litvinenko.vladimir@gmail.com) --- */ | ||||
|     CV_CAP_PROP_GIGA_FRAME_OFFSET_X = 10001, | ||||
|     CV_CAP_PROP_GIGA_FRAME_OFFSET_Y = 10002, | ||||
|     CV_CAP_PROP_GIGA_FRAME_WIDTH_MAX = 10003, | ||||
|     CV_CAP_PROP_GIGA_FRAME_HEIGH_MAX = 10004, | ||||
|     CV_CAP_PROP_GIGA_FRAME_SENS_WIDTH = 10005, | ||||
|     CV_CAP_PROP_GIGA_FRAME_SENS_HEIGH = 10006, | ||||
| 
 | ||||
|     CV_CAP_PROP_INTELPERC_PROFILE_COUNT               = 11001, | ||||
|     CV_CAP_PROP_INTELPERC_PROFILE_IDX                 = 11002, | ||||
|     CV_CAP_PROP_INTELPERC_DEPTH_LOW_CONFIDENCE_VALUE  = 11003, | ||||
|     CV_CAP_PROP_INTELPERC_DEPTH_SATURATION_VALUE      = 11004, | ||||
|     CV_CAP_PROP_INTELPERC_DEPTH_CONFIDENCE_THRESHOLD  = 11005, | ||||
|     CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_HORZ     = 11006, | ||||
|     CV_CAP_PROP_INTELPERC_DEPTH_FOCAL_LENGTH_VERT     = 11007, | ||||
| 
 | ||||
|     // Intel PerC streams
 | ||||
|     CV_CAP_INTELPERC_DEPTH_GENERATOR = 1 << 29, | ||||
|     CV_CAP_INTELPERC_IMAGE_GENERATOR = 1 << 28, | ||||
|     CV_CAP_INTELPERC_GENERATORS_MASK = CV_CAP_INTELPERC_DEPTH_GENERATOR + CV_CAP_INTELPERC_IMAGE_GENERATOR | ||||
| }; | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     // Data given from depth generator.
 | ||||
|     CV_CAP_OPENNI_DEPTH_MAP                 = 0, // Depth values in mm (CV_16UC1)
 | ||||
|     CV_CAP_OPENNI_POINT_CLOUD_MAP           = 1, // XYZ in meters (CV_32FC3)
 | ||||
|     CV_CAP_OPENNI_DISPARITY_MAP             = 2, // Disparity in pixels (CV_8UC1)
 | ||||
|     CV_CAP_OPENNI_DISPARITY_MAP_32F         = 3, // Disparity in pixels (CV_32FC1)
 | ||||
|     CV_CAP_OPENNI_VALID_DEPTH_MASK          = 4, // CV_8UC1
 | ||||
| 
 | ||||
|     // Data given from RGB image generator.
 | ||||
|     CV_CAP_OPENNI_BGR_IMAGE                 = 5, | ||||
|     CV_CAP_OPENNI_GRAY_IMAGE                = 6 | ||||
| }; | ||||
| 
 | ||||
| // Supported output modes of OpenNI image generator
 | ||||
| enum | ||||
| { | ||||
|     CV_CAP_OPENNI_VGA_30HZ     = 0, | ||||
|     CV_CAP_OPENNI_SXGA_15HZ    = 1, | ||||
|     CV_CAP_OPENNI_SXGA_30HZ    = 2, | ||||
|     CV_CAP_OPENNI_QVGA_30HZ    = 3, | ||||
|     CV_CAP_OPENNI_QVGA_60HZ    = 4 | ||||
| }; | ||||
| 
 | ||||
| //supported by Android camera output formats
 | ||||
| enum | ||||
| { | ||||
|     CV_CAP_ANDROID_COLOR_FRAME_BGR = 0, //BGR
 | ||||
|     CV_CAP_ANDROID_COLOR_FRAME = CV_CAP_ANDROID_COLOR_FRAME_BGR, | ||||
|     CV_CAP_ANDROID_GREY_FRAME  = 1,  //Y
 | ||||
|     CV_CAP_ANDROID_COLOR_FRAME_RGB = 2, | ||||
|     CV_CAP_ANDROID_COLOR_FRAME_BGRA = 3, | ||||
|     CV_CAP_ANDROID_COLOR_FRAME_RGBA = 4 | ||||
| }; | ||||
| 
 | ||||
| // supported Android camera flash modes
 | ||||
| enum | ||||
| { | ||||
|     CV_CAP_ANDROID_FLASH_MODE_AUTO = 0, | ||||
|     CV_CAP_ANDROID_FLASH_MODE_OFF, | ||||
|     CV_CAP_ANDROID_FLASH_MODE_ON, | ||||
|     CV_CAP_ANDROID_FLASH_MODE_RED_EYE, | ||||
|     CV_CAP_ANDROID_FLASH_MODE_TORCH | ||||
| }; | ||||
| 
 | ||||
| // supported Android camera focus modes
 | ||||
| enum | ||||
| { | ||||
|     CV_CAP_ANDROID_FOCUS_MODE_AUTO = 0, | ||||
|     CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_PICTURE, | ||||
|     CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_VIDEO, | ||||
|     CV_CAP_ANDROID_FOCUS_MODE_EDOF, | ||||
|     CV_CAP_ANDROID_FOCUS_MODE_FIXED, | ||||
|     CV_CAP_ANDROID_FOCUS_MODE_INFINITY, | ||||
|     CV_CAP_ANDROID_FOCUS_MODE_MACRO | ||||
| }; | ||||
| 
 | ||||
| // supported Android camera white balance modes
 | ||||
| enum | ||||
| { | ||||
|     CV_CAP_ANDROID_WHITE_BALANCE_AUTO = 0, | ||||
|     CV_CAP_ANDROID_WHITE_BALANCE_CLOUDY_DAYLIGHT, | ||||
|     CV_CAP_ANDROID_WHITE_BALANCE_DAYLIGHT, | ||||
|     CV_CAP_ANDROID_WHITE_BALANCE_FLUORESCENT, | ||||
|     CV_CAP_ANDROID_WHITE_BALANCE_INCANDESCENT, | ||||
|     CV_CAP_ANDROID_WHITE_BALANCE_SHADE, | ||||
|     CV_CAP_ANDROID_WHITE_BALANCE_TWILIGHT, | ||||
|     CV_CAP_ANDROID_WHITE_BALANCE_WARM_FLUORESCENT | ||||
| }; | ||||
| 
 | ||||
| // supported Android camera antibanding modes
 | ||||
| enum | ||||
| { | ||||
|     CV_CAP_ANDROID_ANTIBANDING_50HZ = 0, | ||||
|     CV_CAP_ANDROID_ANTIBANDING_60HZ, | ||||
|     CV_CAP_ANDROID_ANTIBANDING_AUTO, | ||||
|     CV_CAP_ANDROID_ANTIBANDING_OFF | ||||
| }; | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|     CV_CAP_INTELPERC_DEPTH_MAP              = 0, // Each pixel is a 16-bit integer. The value indicates the distance from an object to the camera's XY plane or the Cartesian depth.
 | ||||
|     CV_CAP_INTELPERC_UVDEPTH_MAP            = 1, // Each pixel contains two 32-bit floating point values in the range of 0-1, representing the mapping of depth coordinates to the color coordinates.
 | ||||
|     CV_CAP_INTELPERC_IR_MAP                 = 2, // Each pixel is a 16-bit integer. The value indicates the intensity of the reflected laser beam.
 | ||||
|     CV_CAP_INTELPERC_IMAGE                  = 3 | ||||
| }; | ||||
| 
 | ||||
| /* retrieve or set capture properties */ | ||||
| CVAPI(double) cvGetCaptureProperty( CvCapture* capture, int property_id ); | ||||
| CVAPI(int)    cvSetCaptureProperty( CvCapture* capture, int property_id, double value ); | ||||
| 
 | ||||
| // Return the type of the capturer (eg, CV_CAP_V4W, CV_CAP_UNICAP), which is unknown if created with CV_CAP_ANY
 | ||||
| CVAPI(int)    cvGetCaptureDomain( CvCapture* capture); | ||||
| 
 | ||||
| /* "black box" video file writer structure */ | ||||
| typedef struct CvVideoWriter CvVideoWriter; | ||||
| 
 | ||||
| #define CV_FOURCC_MACRO(c1, c2, c3, c4) (((c1) & 255) + (((c2) & 255) << 8) + (((c3) & 255) << 16) + (((c4) & 255) << 24)) | ||||
| 
 | ||||
| CV_INLINE int CV_FOURCC(char c1, char c2, char c3, char c4) | ||||
| { | ||||
|     return CV_FOURCC_MACRO(c1, c2, c3, c4); | ||||
| } | ||||
| 
 | ||||
| #define CV_FOURCC_PROMPT -1  /* Open Codec Selection Dialog (Windows only) */ | ||||
| #define CV_FOURCC_DEFAULT CV_FOURCC('I', 'Y', 'U', 'V') /* Use default codec for specified filename (Linux only) */ | ||||
| 
 | ||||
| /* initialize video file writer */ | ||||
| CVAPI(CvVideoWriter*) cvCreateVideoWriter( const char* filename, int fourcc, | ||||
|                                            double fps, CvSize frame_size, | ||||
|                                            int is_color CV_DEFAULT(1)); | ||||
| 
 | ||||
| //CVAPI(CvVideoWriter*) cvCreateImageSequenceWriter( const char* filename,
 | ||||
| //                                                   int is_color CV_DEFAULT(1));
 | ||||
| 
 | ||||
| /* write frame to video file */ | ||||
| CVAPI(int) cvWriteFrame( CvVideoWriter* writer, const IplImage* image ); | ||||
| 
 | ||||
| /* close video file writer */ | ||||
| CVAPI(void) cvReleaseVideoWriter( CvVideoWriter** writer ); | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                              Obsolete functions/synonyms                               * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| #define cvCaptureFromFile cvCreateFileCapture | ||||
| #define cvCaptureFromCAM cvCreateCameraCapture | ||||
| #define cvCaptureFromAVI cvCaptureFromFile | ||||
| #define cvCreateAVIWriter cvCreateVideoWriter | ||||
| #define cvWriteToAVI cvWriteFrame | ||||
| #define cvAddSearchPath(path) | ||||
| #define cvvInitSystem cvInitSystem | ||||
| #define cvvNamedWindow cvNamedWindow | ||||
| #define cvvShowImage cvShowImage | ||||
| #define cvvResizeWindow cvResizeWindow | ||||
| #define cvvDestroyWindow cvDestroyWindow | ||||
| #define cvvCreateTrackbar cvCreateTrackbar | ||||
| #define cvvLoadImage(name) cvLoadImage((name),1) | ||||
| #define cvvSaveImage cvSaveImage | ||||
| #define cvvAddSearchPath cvAddSearchPath | ||||
| #define cvvWaitKey(name) cvWaitKey(0) | ||||
| #define cvvWaitKeyEx(name,delay) cvWaitKey(delay) | ||||
| #define cvvConvertImage cvConvertImage | ||||
| #define HG_AUTOSIZE CV_WINDOW_AUTOSIZE | ||||
| #define set_preprocess_func cvSetPreprocessFuncWin32 | ||||
| #define set_postprocess_func cvSetPostprocessFuncWin32 | ||||
| 
 | ||||
| #if defined WIN32 || defined _WIN32 | ||||
| 
 | ||||
| CVAPI(void) cvSetPreprocessFuncWin32_(const void* callback); | ||||
| CVAPI(void) cvSetPostprocessFuncWin32_(const void* callback); | ||||
| #define cvSetPreprocessFuncWin32(callback) cvSetPreprocessFuncWin32_((const void*)(callback)) | ||||
| #define cvSetPostprocessFuncWin32(callback) cvSetPostprocessFuncWin32_((const void*)(callback)) | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| @ -1,49 +0,0 @@ | ||||
| 
 | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                          License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #include "opencv2/core/core.hpp" | ||||
| #import "opencv2/highgui/cap_ios.h" | ||||
| 
 | ||||
| UIImage* MatToUIImage(const cv::Mat& image); | ||||
| void UIImageToMat(const UIImage* image, | ||||
|                          cv::Mat& m, bool alphaExist = false); | ||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -1,623 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_IMGPROC_IMGPROC_C_H__ | ||||
| #define __OPENCV_IMGPROC_IMGPROC_C_H__ | ||||
| 
 | ||||
| #include "opencv2/core/core_c.h" | ||||
| #include "opencv2/imgproc/types_c.h" | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| /*********************** Background statistics accumulation *****************************/ | ||||
| 
 | ||||
| /* Adds image to accumulator */ | ||||
| CVAPI(void)  cvAcc( const CvArr* image, CvArr* sum, | ||||
|                    const CvArr* mask CV_DEFAULT(NULL) ); | ||||
| 
 | ||||
| /* Adds squared image to accumulator */ | ||||
| CVAPI(void)  cvSquareAcc( const CvArr* image, CvArr* sqsum, | ||||
|                          const CvArr* mask CV_DEFAULT(NULL) ); | ||||
| 
 | ||||
| /* Adds a product of two images to accumulator */ | ||||
| CVAPI(void)  cvMultiplyAcc( const CvArr* image1, const CvArr* image2, CvArr* acc, | ||||
|                            const CvArr* mask CV_DEFAULT(NULL) ); | ||||
| 
 | ||||
| /* Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha */ | ||||
| CVAPI(void)  cvRunningAvg( const CvArr* image, CvArr* acc, double alpha, | ||||
|                           const CvArr* mask CV_DEFAULT(NULL) ); | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                                    Image Processing                                    * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| /* Copies source 2D array inside of the larger destination array and
 | ||||
|    makes a border of the specified type (IPL_BORDER_*) around the copied area. */ | ||||
| CVAPI(void) cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset, | ||||
|                               int bordertype, CvScalar value CV_DEFAULT(cvScalarAll(0))); | ||||
| 
 | ||||
| /* Smoothes array (removes noise) */ | ||||
| CVAPI(void) cvSmooth( const CvArr* src, CvArr* dst, | ||||
|                       int smoothtype CV_DEFAULT(CV_GAUSSIAN), | ||||
|                       int size1 CV_DEFAULT(3), | ||||
|                       int size2 CV_DEFAULT(0), | ||||
|                       double sigma1 CV_DEFAULT(0), | ||||
|                       double sigma2 CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Convolves the image with the kernel */ | ||||
| CVAPI(void) cvFilter2D( const CvArr* src, CvArr* dst, const CvMat* kernel, | ||||
|                         CvPoint anchor CV_DEFAULT(cvPoint(-1,-1))); | ||||
| 
 | ||||
| /* Finds integral image: SUM(X,Y) = sum(x<X,y<Y)I(x,y) */ | ||||
| CVAPI(void) cvIntegral( const CvArr* image, CvArr* sum, | ||||
|                        CvArr* sqsum CV_DEFAULT(NULL), | ||||
|                        CvArr* tilted_sum CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| /*
 | ||||
|    Smoothes the input image with gaussian kernel and then down-samples it. | ||||
|    dst_width = floor(src_width/2)[+1], | ||||
|    dst_height = floor(src_height/2)[+1] | ||||
| */ | ||||
| CVAPI(void)  cvPyrDown( const CvArr* src, CvArr* dst, | ||||
|                         int filter CV_DEFAULT(CV_GAUSSIAN_5x5) ); | ||||
| 
 | ||||
| /*
 | ||||
|    Up-samples image and smoothes the result with gaussian kernel. | ||||
|    dst_width = src_width*2, | ||||
|    dst_height = src_height*2 | ||||
| */ | ||||
| CVAPI(void)  cvPyrUp( const CvArr* src, CvArr* dst, | ||||
|                       int filter CV_DEFAULT(CV_GAUSSIAN_5x5) ); | ||||
| 
 | ||||
| /* Builds pyramid for an image */ | ||||
| CVAPI(CvMat**) cvCreatePyramid( const CvArr* img, int extra_layers, double rate, | ||||
|                                 const CvSize* layer_sizes CV_DEFAULT(0), | ||||
|                                 CvArr* bufarr CV_DEFAULT(0), | ||||
|                                 int calc CV_DEFAULT(1), | ||||
|                                 int filter CV_DEFAULT(CV_GAUSSIAN_5x5) ); | ||||
| 
 | ||||
| /* Releases pyramid */ | ||||
| CVAPI(void)  cvReleasePyramid( CvMat*** pyramid, int extra_layers ); | ||||
| 
 | ||||
| 
 | ||||
| /* Filters image using meanshift algorithm */ | ||||
| CVAPI(void) cvPyrMeanShiftFiltering( const CvArr* src, CvArr* dst, | ||||
|     double sp, double sr, int max_level CV_DEFAULT(1), | ||||
|     CvTermCriteria termcrit CV_DEFAULT(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,5,1))); | ||||
| 
 | ||||
| /* Segments image using seed "markers" */ | ||||
| CVAPI(void) cvWatershed( const CvArr* image, CvArr* markers ); | ||||
| 
 | ||||
| /* Calculates an image derivative using generalized Sobel
 | ||||
|    (aperture_size = 1,3,5,7) or Scharr (aperture_size = -1) operator. | ||||
|    Scharr can be used only for the first dx or dy derivative */ | ||||
| CVAPI(void) cvSobel( const CvArr* src, CvArr* dst, | ||||
|                     int xorder, int yorder, | ||||
|                     int aperture_size CV_DEFAULT(3)); | ||||
| 
 | ||||
| /* Calculates the image Laplacian: (d2/dx + d2/dy)I */ | ||||
| CVAPI(void) cvLaplace( const CvArr* src, CvArr* dst, | ||||
|                       int aperture_size CV_DEFAULT(3) ); | ||||
| 
 | ||||
| /* Converts input array pixels from one color space to another */ | ||||
| CVAPI(void)  cvCvtColor( const CvArr* src, CvArr* dst, int code ); | ||||
| 
 | ||||
| 
 | ||||
| /* Resizes image (input array is resized to fit the destination array) */ | ||||
| CVAPI(void)  cvResize( const CvArr* src, CvArr* dst, | ||||
|                        int interpolation CV_DEFAULT( CV_INTER_LINEAR )); | ||||
| 
 | ||||
| /* Warps image with affine transform */ | ||||
| CVAPI(void)  cvWarpAffine( const CvArr* src, CvArr* dst, const CvMat* map_matrix, | ||||
|                            int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS), | ||||
|                            CvScalar fillval CV_DEFAULT(cvScalarAll(0)) ); | ||||
| 
 | ||||
| /* Computes affine transform matrix for mapping src[i] to dst[i] (i=0,1,2) */ | ||||
| CVAPI(CvMat*) cvGetAffineTransform( const CvPoint2D32f * src, | ||||
|                                     const CvPoint2D32f * dst, | ||||
|                                     CvMat * map_matrix ); | ||||
| 
 | ||||
| /* Computes rotation_matrix matrix */ | ||||
| CVAPI(CvMat*)  cv2DRotationMatrix( CvPoint2D32f center, double angle, | ||||
|                                    double scale, CvMat* map_matrix ); | ||||
| 
 | ||||
| /* Warps image with perspective (projective) transform */ | ||||
| CVAPI(void)  cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix, | ||||
|                                 int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS), | ||||
|                                 CvScalar fillval CV_DEFAULT(cvScalarAll(0)) ); | ||||
| 
 | ||||
| /* Computes perspective transform matrix for mapping src[i] to dst[i] (i=0,1,2,3) */ | ||||
| CVAPI(CvMat*) cvGetPerspectiveTransform( const CvPoint2D32f* src, | ||||
|                                          const CvPoint2D32f* dst, | ||||
|                                          CvMat* map_matrix ); | ||||
| 
 | ||||
| /* Performs generic geometric transformation using the specified coordinate maps */ | ||||
| CVAPI(void)  cvRemap( const CvArr* src, CvArr* dst, | ||||
|                       const CvArr* mapx, const CvArr* mapy, | ||||
|                       int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS), | ||||
|                       CvScalar fillval CV_DEFAULT(cvScalarAll(0)) ); | ||||
| 
 | ||||
| /* Converts mapx & mapy from floating-point to integer formats for cvRemap */ | ||||
| CVAPI(void)  cvConvertMaps( const CvArr* mapx, const CvArr* mapy, | ||||
|                             CvArr* mapxy, CvArr* mapalpha ); | ||||
| 
 | ||||
| /* Performs forward or inverse log-polar image transform */ | ||||
| CVAPI(void)  cvLogPolar( const CvArr* src, CvArr* dst, | ||||
|                          CvPoint2D32f center, double M, | ||||
|                          int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS)); | ||||
| 
 | ||||
| /* Performs forward or inverse linear-polar image transform */ | ||||
| CVAPI(void)  cvLinearPolar( const CvArr* src, CvArr* dst, | ||||
|                          CvPoint2D32f center, double maxRadius, | ||||
|                          int flags CV_DEFAULT(CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS)); | ||||
| 
 | ||||
| /* Transforms the input image to compensate lens distortion */ | ||||
| CVAPI(void) cvUndistort2( const CvArr* src, CvArr* dst, | ||||
|                           const CvMat* camera_matrix, | ||||
|                           const CvMat* distortion_coeffs, | ||||
|                           const CvMat* new_camera_matrix CV_DEFAULT(0) ); | ||||
| 
 | ||||
| /* Computes transformation map from intrinsic camera parameters
 | ||||
|    that can used by cvRemap */ | ||||
| CVAPI(void) cvInitUndistortMap( const CvMat* camera_matrix, | ||||
|                                 const CvMat* distortion_coeffs, | ||||
|                                 CvArr* mapx, CvArr* mapy ); | ||||
| 
 | ||||
| /* Computes undistortion+rectification map for a head of stereo camera */ | ||||
| CVAPI(void) cvInitUndistortRectifyMap( const CvMat* camera_matrix, | ||||
|                                        const CvMat* dist_coeffs, | ||||
|                                        const CvMat *R, const CvMat* new_camera_matrix, | ||||
|                                        CvArr* mapx, CvArr* mapy ); | ||||
| 
 | ||||
| /* Computes the original (undistorted) feature coordinates
 | ||||
|    from the observed (distorted) coordinates */ | ||||
| CVAPI(void) cvUndistortPoints( const CvMat* src, CvMat* dst, | ||||
|                                const CvMat* camera_matrix, | ||||
|                                const CvMat* dist_coeffs, | ||||
|                                const CvMat* R CV_DEFAULT(0), | ||||
|                                const CvMat* P CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* creates structuring element used for morphological operations */ | ||||
| CVAPI(IplConvKernel*)  cvCreateStructuringElementEx( | ||||
|             int cols, int  rows, int  anchor_x, int  anchor_y, | ||||
|             int shape, int* values CV_DEFAULT(NULL) ); | ||||
| 
 | ||||
| /* releases structuring element */ | ||||
| CVAPI(void)  cvReleaseStructuringElement( IplConvKernel** element ); | ||||
| 
 | ||||
| /* erodes input image (applies minimum filter) one or more times.
 | ||||
|    If element pointer is NULL, 3x3 rectangular element is used */ | ||||
| CVAPI(void)  cvErode( const CvArr* src, CvArr* dst, | ||||
|                       IplConvKernel* element CV_DEFAULT(NULL), | ||||
|                       int iterations CV_DEFAULT(1) ); | ||||
| 
 | ||||
| /* dilates input image (applies maximum filter) one or more times.
 | ||||
|    If element pointer is NULL, 3x3 rectangular element is used */ | ||||
| CVAPI(void)  cvDilate( const CvArr* src, CvArr* dst, | ||||
|                        IplConvKernel* element CV_DEFAULT(NULL), | ||||
|                        int iterations CV_DEFAULT(1) ); | ||||
| 
 | ||||
| /* Performs complex morphological transformation */ | ||||
| CVAPI(void)  cvMorphologyEx( const CvArr* src, CvArr* dst, | ||||
|                              CvArr* temp, IplConvKernel* element, | ||||
|                              int operation, int iterations CV_DEFAULT(1) ); | ||||
| 
 | ||||
| /* Calculates all spatial and central moments up to the 3rd order */ | ||||
| CVAPI(void) cvMoments( const CvArr* arr, CvMoments* moments, int binary CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Retrieve particular spatial, central or normalized central moments */ | ||||
| CVAPI(double)  cvGetSpatialMoment( CvMoments* moments, int x_order, int y_order ); | ||||
| CVAPI(double)  cvGetCentralMoment( CvMoments* moments, int x_order, int y_order ); | ||||
| CVAPI(double)  cvGetNormalizedCentralMoment( CvMoments* moments, | ||||
|                                              int x_order, int y_order ); | ||||
| 
 | ||||
| /* Calculates 7 Hu's invariants from precalculated spatial and central moments */ | ||||
| CVAPI(void) cvGetHuMoments( CvMoments*  moments, CvHuMoments*  hu_moments ); | ||||
| 
 | ||||
| /*********************************** data sampling **************************************/ | ||||
| 
 | ||||
| /* Fetches pixels that belong to the specified line segment and stores them to the buffer.
 | ||||
|    Returns the number of retrieved points. */ | ||||
| CVAPI(int)  cvSampleLine( const CvArr* image, CvPoint pt1, CvPoint pt2, void* buffer, | ||||
|                           int connectivity CV_DEFAULT(8)); | ||||
| 
 | ||||
| /* Retrieves the rectangular image region with specified center from the input array.
 | ||||
|  dst(x,y) <- src(x + center.x - dst_width/2, y + center.y - dst_height/2). | ||||
|  Values of pixels with fractional coordinates are retrieved using bilinear interpolation*/ | ||||
| CVAPI(void)  cvGetRectSubPix( const CvArr* src, CvArr* dst, CvPoint2D32f center ); | ||||
| 
 | ||||
| 
 | ||||
| /* Retrieves quadrangle from the input array.
 | ||||
|     matrixarr = ( a11  a12 | b1 )   dst(x,y) <- src(A[x y]' + b) | ||||
|                 ( a21  a22 | b2 )   (bilinear interpolation is used to retrieve pixels | ||||
|                                      with fractional coordinates) | ||||
| */ | ||||
| CVAPI(void)  cvGetQuadrangleSubPix( const CvArr* src, CvArr* dst, | ||||
|                                     const CvMat* map_matrix ); | ||||
| 
 | ||||
| /* Measures similarity between template and overlapped windows in the source image
 | ||||
|    and fills the resultant image with the measurements */ | ||||
| CVAPI(void)  cvMatchTemplate( const CvArr* image, const CvArr* templ, | ||||
|                               CvArr* result, int method ); | ||||
| 
 | ||||
| /* Computes earth mover distance between
 | ||||
|    two weighted point sets (called signatures) */ | ||||
| CVAPI(float)  cvCalcEMD2( const CvArr* signature1, | ||||
|                           const CvArr* signature2, | ||||
|                           int distance_type, | ||||
|                           CvDistanceFunction distance_func CV_DEFAULT(NULL), | ||||
|                           const CvArr* cost_matrix CV_DEFAULT(NULL), | ||||
|                           CvArr* flow CV_DEFAULT(NULL), | ||||
|                           float* lower_bound CV_DEFAULT(NULL), | ||||
|                           void* userdata CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                              Contours retrieving                                       * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| /* Retrieves outer and optionally inner boundaries of white (non-zero) connected
 | ||||
|    components in the black (zero) background */ | ||||
| CVAPI(int)  cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour, | ||||
|                             int header_size CV_DEFAULT(sizeof(CvContour)), | ||||
|                             int mode CV_DEFAULT(CV_RETR_LIST), | ||||
|                             int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE), | ||||
|                             CvPoint offset CV_DEFAULT(cvPoint(0,0))); | ||||
| 
 | ||||
| /* Initializes contour retrieving process.
 | ||||
|    Calls cvStartFindContours. | ||||
|    Calls cvFindNextContour until null pointer is returned | ||||
|    or some other condition becomes true. | ||||
|    Calls cvEndFindContours at the end. */ | ||||
| CVAPI(CvContourScanner)  cvStartFindContours( CvArr* image, CvMemStorage* storage, | ||||
|                             int header_size CV_DEFAULT(sizeof(CvContour)), | ||||
|                             int mode CV_DEFAULT(CV_RETR_LIST), | ||||
|                             int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE), | ||||
|                             CvPoint offset CV_DEFAULT(cvPoint(0,0))); | ||||
| 
 | ||||
| /* Retrieves next contour */ | ||||
| CVAPI(CvSeq*)  cvFindNextContour( CvContourScanner scanner ); | ||||
| 
 | ||||
| 
 | ||||
| /* Substitutes the last retrieved contour with the new one
 | ||||
|    (if the substitutor is null, the last retrieved contour is removed from the tree) */ | ||||
| CVAPI(void)   cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour ); | ||||
| 
 | ||||
| 
 | ||||
| /* Releases contour scanner and returns pointer to the first outer contour */ | ||||
| CVAPI(CvSeq*)  cvEndFindContours( CvContourScanner* scanner ); | ||||
| 
 | ||||
| /* Approximates a single Freeman chain or a tree of chains to polygonal curves */ | ||||
| CVAPI(CvSeq*) cvApproxChains( CvSeq* src_seq, CvMemStorage* storage, | ||||
|                             int method CV_DEFAULT(CV_CHAIN_APPROX_SIMPLE), | ||||
|                             double parameter CV_DEFAULT(0), | ||||
|                             int  minimal_perimeter CV_DEFAULT(0), | ||||
|                             int  recursive CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Initializes Freeman chain reader.
 | ||||
|    The reader is used to iteratively get coordinates of all the chain points. | ||||
|    If the Freeman codes should be read as is, a simple sequence reader should be used */ | ||||
| CVAPI(void) cvStartReadChainPoints( CvChain* chain, CvChainPtReader* reader ); | ||||
| 
 | ||||
| /* Retrieves the next chain point */ | ||||
| CVAPI(CvPoint) cvReadChainPoint( CvChainPtReader* reader ); | ||||
| 
 | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                            Contour Processing and Shape Analysis                       * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| /* Approximates a single polygonal curve (contour) or
 | ||||
|    a tree of polygonal curves (contours) */ | ||||
| CVAPI(CvSeq*)  cvApproxPoly( const void* src_seq, | ||||
|                              int header_size, CvMemStorage* storage, | ||||
|                              int method, double eps, | ||||
|                              int recursive CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Calculates perimeter of a contour or length of a part of contour */ | ||||
| CVAPI(double)  cvArcLength( const void* curve, | ||||
|                             CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ), | ||||
|                             int is_closed CV_DEFAULT(-1)); | ||||
| 
 | ||||
| CV_INLINE double cvContourPerimeter( const void* contour ) | ||||
| { | ||||
|     return cvArcLength( contour, CV_WHOLE_SEQ, 1 ); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Calculates contour bounding rectangle (update=1) or
 | ||||
|    just retrieves pre-calculated rectangle (update=0) */ | ||||
| CVAPI(CvRect)  cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) ); | ||||
| 
 | ||||
| /* Calculates area of a contour or contour segment */ | ||||
| CVAPI(double)  cvContourArea( const CvArr* contour, | ||||
|                               CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ), | ||||
|                               int oriented CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Finds minimum area rotated rectangle bounding a set of points */ | ||||
| CVAPI(CvBox2D)  cvMinAreaRect2( const CvArr* points, | ||||
|                                 CvMemStorage* storage CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| /* Finds minimum enclosing circle for a set of points */ | ||||
| CVAPI(int)  cvMinEnclosingCircle( const CvArr* points, | ||||
|                                   CvPoint2D32f* center, float* radius ); | ||||
| 
 | ||||
| /* Compares two contours by matching their moments */ | ||||
| CVAPI(double)  cvMatchShapes( const void* object1, const void* object2, | ||||
|                               int method, double parameter CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Calculates exact convex hull of 2d point set */ | ||||
| CVAPI(CvSeq*) cvConvexHull2( const CvArr* input, | ||||
|                              void* hull_storage CV_DEFAULT(NULL), | ||||
|                              int orientation CV_DEFAULT(CV_CLOCKWISE), | ||||
|                              int return_points CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Checks whether the contour is convex or not (returns 1 if convex, 0 if not) */ | ||||
| CVAPI(int)  cvCheckContourConvexity( const CvArr* contour ); | ||||
| 
 | ||||
| 
 | ||||
| /* Finds convexity defects for the contour */ | ||||
| CVAPI(CvSeq*)  cvConvexityDefects( const CvArr* contour, const CvArr* convexhull, | ||||
|                                    CvMemStorage* storage CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| /* Fits ellipse into a set of 2d points */ | ||||
| CVAPI(CvBox2D) cvFitEllipse2( const CvArr* points ); | ||||
| 
 | ||||
| /* Finds minimum rectangle containing two given rectangles */ | ||||
| CVAPI(CvRect)  cvMaxRect( const CvRect* rect1, const CvRect* rect2 ); | ||||
| 
 | ||||
| /* Finds coordinates of the box vertices */ | ||||
| CVAPI(void) cvBoxPoints( CvBox2D box, CvPoint2D32f pt[4] ); | ||||
| 
 | ||||
| /* Initializes sequence header for a matrix (column or row vector) of points -
 | ||||
|    a wrapper for cvMakeSeqHeaderForArray (it does not initialize bounding rectangle!!!) */ | ||||
| CVAPI(CvSeq*) cvPointSeqFromMat( int seq_kind, const CvArr* mat, | ||||
|                                  CvContour* contour_header, | ||||
|                                  CvSeqBlock* block ); | ||||
| 
 | ||||
| /* Checks whether the point is inside polygon, outside, on an edge (at a vertex).
 | ||||
|    Returns positive, negative or zero value, correspondingly. | ||||
|    Optionally, measures a signed distance between | ||||
|    the point and the nearest polygon edge (measure_dist=1) */ | ||||
| CVAPI(double) cvPointPolygonTest( const CvArr* contour, | ||||
|                                   CvPoint2D32f pt, int measure_dist ); | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                                  Histogram functions                                   * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| /* Creates new histogram */ | ||||
| CVAPI(CvHistogram*)  cvCreateHist( int dims, int* sizes, int type, | ||||
|                                    float** ranges CV_DEFAULT(NULL), | ||||
|                                    int uniform CV_DEFAULT(1)); | ||||
| 
 | ||||
| /* Assignes histogram bin ranges */ | ||||
| CVAPI(void)  cvSetHistBinRanges( CvHistogram* hist, float** ranges, | ||||
|                                 int uniform CV_DEFAULT(1)); | ||||
| 
 | ||||
| /* Creates histogram header for array */ | ||||
| CVAPI(CvHistogram*)  cvMakeHistHeaderForArray( | ||||
|                             int  dims, int* sizes, CvHistogram* hist, | ||||
|                             float* data, float** ranges CV_DEFAULT(NULL), | ||||
|                             int uniform CV_DEFAULT(1)); | ||||
| 
 | ||||
| /* Releases histogram */ | ||||
| CVAPI(void)  cvReleaseHist( CvHistogram** hist ); | ||||
| 
 | ||||
| /* Clears all the histogram bins */ | ||||
| CVAPI(void)  cvClearHist( CvHistogram* hist ); | ||||
| 
 | ||||
| /* Finds indices and values of minimum and maximum histogram bins */ | ||||
| CVAPI(void)  cvGetMinMaxHistValue( const CvHistogram* hist, | ||||
|                                    float* min_value, float* max_value, | ||||
|                                    int* min_idx CV_DEFAULT(NULL), | ||||
|                                    int* max_idx CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| 
 | ||||
| /* Normalizes histogram by dividing all bins by sum of the bins, multiplied by <factor>.
 | ||||
|    After that sum of histogram bins is equal to <factor> */ | ||||
| CVAPI(void)  cvNormalizeHist( CvHistogram* hist, double factor ); | ||||
| 
 | ||||
| 
 | ||||
| /* Clear all histogram bins that are below the threshold */ | ||||
| CVAPI(void)  cvThreshHist( CvHistogram* hist, double threshold ); | ||||
| 
 | ||||
| 
 | ||||
| /* Compares two histogram */ | ||||
| CVAPI(double)  cvCompareHist( const CvHistogram* hist1, | ||||
|                               const CvHistogram* hist2, | ||||
|                               int method); | ||||
| 
 | ||||
| /* Copies one histogram to another. Destination histogram is created if
 | ||||
|    the destination pointer is NULL */ | ||||
| CVAPI(void)  cvCopyHist( const CvHistogram* src, CvHistogram** dst ); | ||||
| 
 | ||||
| 
 | ||||
| /* Calculates bayesian probabilistic histograms
 | ||||
|    (each or src and dst is an array of <number> histograms */ | ||||
| CVAPI(void)  cvCalcBayesianProb( CvHistogram** src, int number, | ||||
|                                 CvHistogram** dst); | ||||
| 
 | ||||
| /* Calculates array histogram */ | ||||
| CVAPI(void)  cvCalcArrHist( CvArr** arr, CvHistogram* hist, | ||||
|                             int accumulate CV_DEFAULT(0), | ||||
|                             const CvArr* mask CV_DEFAULT(NULL) ); | ||||
| 
 | ||||
| CV_INLINE  void  cvCalcHist( IplImage** image, CvHistogram* hist, | ||||
|                              int accumulate CV_DEFAULT(0), | ||||
|                              const CvArr* mask CV_DEFAULT(NULL) ) | ||||
| { | ||||
|     cvCalcArrHist( (CvArr**)image, hist, accumulate, mask ); | ||||
| } | ||||
| 
 | ||||
| /* Calculates back project */ | ||||
| CVAPI(void)  cvCalcArrBackProject( CvArr** image, CvArr* dst, | ||||
|                                    const CvHistogram* hist ); | ||||
| #define  cvCalcBackProject(image, dst, hist) cvCalcArrBackProject((CvArr**)image, dst, hist) | ||||
| 
 | ||||
| 
 | ||||
| /* Does some sort of template matching but compares histograms of
 | ||||
|    template and each window location */ | ||||
| CVAPI(void)  cvCalcArrBackProjectPatch( CvArr** image, CvArr* dst, CvSize range, | ||||
|                                         CvHistogram* hist, int method, | ||||
|                                         double factor ); | ||||
| #define  cvCalcBackProjectPatch( image, dst, range, hist, method, factor ) \ | ||||
|      cvCalcArrBackProjectPatch( (CvArr**)image, dst, range, hist, method, factor ) | ||||
| 
 | ||||
| 
 | ||||
| /* calculates probabilistic density (divides one histogram by another) */ | ||||
| CVAPI(void)  cvCalcProbDensity( const CvHistogram* hist1, const CvHistogram* hist2, | ||||
|                                 CvHistogram* dst_hist, double scale CV_DEFAULT(255) ); | ||||
| 
 | ||||
| /* equalizes histogram of 8-bit single-channel image */ | ||||
| CVAPI(void)  cvEqualizeHist( const CvArr* src, CvArr* dst ); | ||||
| 
 | ||||
| 
 | ||||
| /* Applies distance transform to binary image */ | ||||
| CVAPI(void)  cvDistTransform( const CvArr* src, CvArr* dst, | ||||
|                               int distance_type CV_DEFAULT(CV_DIST_L2), | ||||
|                               int mask_size CV_DEFAULT(3), | ||||
|                               const float* mask CV_DEFAULT(NULL), | ||||
|                               CvArr* labels CV_DEFAULT(NULL), | ||||
|                               int labelType CV_DEFAULT(CV_DIST_LABEL_CCOMP)); | ||||
| 
 | ||||
| 
 | ||||
| /* Applies fixed-level threshold to grayscale image.
 | ||||
|    This is a basic operation applied before retrieving contours */ | ||||
| CVAPI(double)  cvThreshold( const CvArr*  src, CvArr*  dst, | ||||
|                             double  threshold, double  max_value, | ||||
|                             int threshold_type ); | ||||
| 
 | ||||
| /* Applies adaptive threshold to grayscale image.
 | ||||
|    The two parameters for methods CV_ADAPTIVE_THRESH_MEAN_C and | ||||
|    CV_ADAPTIVE_THRESH_GAUSSIAN_C are: | ||||
|    neighborhood size (3, 5, 7 etc.), | ||||
|    and a constant subtracted from mean (...,-3,-2,-1,0,1,2,3,...) */ | ||||
| CVAPI(void)  cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, | ||||
|                                   int adaptive_method CV_DEFAULT(CV_ADAPTIVE_THRESH_MEAN_C), | ||||
|                                   int threshold_type CV_DEFAULT(CV_THRESH_BINARY), | ||||
|                                   int block_size CV_DEFAULT(3), | ||||
|                                   double param1 CV_DEFAULT(5)); | ||||
| 
 | ||||
| /* Fills the connected component until the color difference gets large enough */ | ||||
| CVAPI(void)  cvFloodFill( CvArr* image, CvPoint seed_point, | ||||
|                           CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll(0)), | ||||
|                           CvScalar up_diff CV_DEFAULT(cvScalarAll(0)), | ||||
|                           CvConnectedComp* comp CV_DEFAULT(NULL), | ||||
|                           int flags CV_DEFAULT(4), | ||||
|                           CvArr* mask CV_DEFAULT(NULL)); | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                                  Feature detection                                     * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| /* Runs canny edge detector */ | ||||
| CVAPI(void)  cvCanny( const CvArr* image, CvArr* edges, double threshold1, | ||||
|                       double threshold2, int  aperture_size CV_DEFAULT(3) ); | ||||
| 
 | ||||
| /* Calculates constraint image for corner detection
 | ||||
|    Dx^2 * Dyy + Dxx * Dy^2 - 2 * Dx * Dy * Dxy. | ||||
|    Applying threshold to the result gives coordinates of corners */ | ||||
| CVAPI(void) cvPreCornerDetect( const CvArr* image, CvArr* corners, | ||||
|                                int aperture_size CV_DEFAULT(3) ); | ||||
| 
 | ||||
| /* Calculates eigen values and vectors of 2x2
 | ||||
|    gradient covariation matrix at every image pixel */ | ||||
| CVAPI(void)  cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv, | ||||
|                                        int block_size, int aperture_size CV_DEFAULT(3) ); | ||||
| 
 | ||||
| /* Calculates minimal eigenvalue for 2x2 gradient covariation matrix at
 | ||||
|    every image pixel */ | ||||
| CVAPI(void)  cvCornerMinEigenVal( const CvArr* image, CvArr* eigenval, | ||||
|                                   int block_size, int aperture_size CV_DEFAULT(3) ); | ||||
| 
 | ||||
| /* Harris corner detector:
 | ||||
|    Calculates det(M) - k*(trace(M)^2), where M is 2x2 gradient covariation matrix for each pixel */ | ||||
| CVAPI(void)  cvCornerHarris( const CvArr* image, CvArr* harris_response, | ||||
|                              int block_size, int aperture_size CV_DEFAULT(3), | ||||
|                              double k CV_DEFAULT(0.04) ); | ||||
| 
 | ||||
| /* Adjust corner position using some sort of gradient search */ | ||||
| CVAPI(void)  cvFindCornerSubPix( const CvArr* image, CvPoint2D32f* corners, | ||||
|                                  int count, CvSize win, CvSize zero_zone, | ||||
|                                  CvTermCriteria  criteria ); | ||||
| 
 | ||||
| /* Finds a sparse set of points within the selected region
 | ||||
|    that seem to be easy to track */ | ||||
| CVAPI(void)  cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image, | ||||
|                                     CvArr* temp_image, CvPoint2D32f* corners, | ||||
|                                     int* corner_count, double  quality_level, | ||||
|                                     double  min_distance, | ||||
|                                     const CvArr* mask CV_DEFAULT(NULL), | ||||
|                                     int block_size CV_DEFAULT(3), | ||||
|                                     int use_harris CV_DEFAULT(0), | ||||
|                                     double k CV_DEFAULT(0.04) ); | ||||
| 
 | ||||
| /* Finds lines on binary image using one of several methods.
 | ||||
|    line_storage is either memory storage or 1 x <max number of lines> CvMat, its | ||||
|    number of columns is changed by the function. | ||||
|    method is one of CV_HOUGH_*; | ||||
|    rho, theta and threshold are used for each of those methods; | ||||
|    param1 ~ line length, param2 ~ line gap - for probabilistic, | ||||
|    param1 ~ srn, param2 ~ stn - for multi-scale */ | ||||
| CVAPI(CvSeq*)  cvHoughLines2( CvArr* image, void* line_storage, int method, | ||||
|                               double rho, double theta, int threshold, | ||||
|                               double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Finds circles in the image */ | ||||
| CVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage, | ||||
|                               int method, double dp, double min_dist, | ||||
|                               double param1 CV_DEFAULT(100), | ||||
|                               double param2 CV_DEFAULT(100), | ||||
|                               int min_radius CV_DEFAULT(0), | ||||
|                               int max_radius CV_DEFAULT(0)); | ||||
| 
 | ||||
| /* Fits a line into set of 2d or 3d points in a robust way (M-estimator technique) */ | ||||
| CVAPI(void)  cvFitLine( const CvArr* points, int dist_type, double param, | ||||
|                         double reps, double aeps, float* line ); | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
| @ -1,640 +0,0 @@ | ||||
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | ||||
| //
 | ||||
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | ||||
| //
 | ||||
| //  By downloading, copying, installing or using the software you agree to this license.
 | ||||
| //  If you do not agree to this license, do not download, install,
 | ||||
| //  copy or use the software.
 | ||||
| //
 | ||||
| //
 | ||||
| //                           License Agreement
 | ||||
| //                For Open Source Computer Vision Library
 | ||||
| //
 | ||||
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | ||||
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | ||||
| // Third party copyrights are property of their respective owners.
 | ||||
| //
 | ||||
| // Redistribution and use in source and binary forms, with or without modification,
 | ||||
| // are permitted provided that the following conditions are met:
 | ||||
| //
 | ||||
| //   * Redistribution's of source code must retain the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer.
 | ||||
| //
 | ||||
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | ||||
| //     this list of conditions and the following disclaimer in the documentation
 | ||||
| //     and/or other materials provided with the distribution.
 | ||||
| //
 | ||||
| //   * The name of the copyright holders may not be used to endorse or promote products
 | ||||
| //     derived from this software without specific prior written permission.
 | ||||
| //
 | ||||
| // This software is provided by the copyright holders and contributors "as is" and
 | ||||
| // any express or implied warranties, including, but not limited to, the implied
 | ||||
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | ||||
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | ||||
| // indirect, incidental, special, exemplary, or consequential damages
 | ||||
| // (including, but not limited to, procurement of substitute goods or services;
 | ||||
| // loss of use, data, or profits; or business interruption) however caused
 | ||||
| // and on any theory of liability, whether in contract, strict liability,
 | ||||
| // or tort (including negligence or otherwise) arising in any way out of
 | ||||
| // the use of this software, even if advised of the possibility of such damage.
 | ||||
| //
 | ||||
| //M*/
 | ||||
| 
 | ||||
| #ifndef __OPENCV_IMGPROC_TYPES_C_H__ | ||||
| #define __OPENCV_IMGPROC_TYPES_C_H__ | ||||
| 
 | ||||
| #include "opencv2/core/core_c.h" | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| /* Connected component structure */ | ||||
| typedef struct CvConnectedComp | ||||
| { | ||||
|     double area;    /* area of the connected component  */ | ||||
|     CvScalar value; /* average color of the connected component */ | ||||
|     CvRect rect;    /* ROI of the component  */ | ||||
|     CvSeq* contour; /* optional component boundary
 | ||||
|                       (the contour might have child contours corresponding to the holes)*/ | ||||
| } | ||||
| CvConnectedComp; | ||||
| 
 | ||||
| /* Image smooth methods */ | ||||
| enum | ||||
| { | ||||
|     CV_BLUR_NO_SCALE =0, | ||||
|     CV_BLUR  =1, | ||||
|     CV_GAUSSIAN  =2, | ||||
|     CV_MEDIAN =3, | ||||
|     CV_BILATERAL =4 | ||||
| }; | ||||
| 
 | ||||
| /* Filters used in pyramid decomposition */ | ||||
| enum | ||||
| { | ||||
|     CV_GAUSSIAN_5x5 = 7 | ||||
| }; | ||||
| 
 | ||||
| /* Special filters */ | ||||
| enum | ||||
| { | ||||
|     CV_SCHARR =-1, | ||||
|     CV_MAX_SOBEL_KSIZE =7 | ||||
| }; | ||||
| 
 | ||||
| /* Constants for color conversion */ | ||||
| enum | ||||
| { | ||||
|     CV_BGR2BGRA    =0, | ||||
|     CV_RGB2RGBA    =CV_BGR2BGRA, | ||||
| 
 | ||||
|     CV_BGRA2BGR    =1, | ||||
|     CV_RGBA2RGB    =CV_BGRA2BGR, | ||||
| 
 | ||||
|     CV_BGR2RGBA    =2, | ||||
|     CV_RGB2BGRA    =CV_BGR2RGBA, | ||||
| 
 | ||||
|     CV_RGBA2BGR    =3, | ||||
|     CV_BGRA2RGB    =CV_RGBA2BGR, | ||||
| 
 | ||||
|     CV_BGR2RGB     =4, | ||||
|     CV_RGB2BGR     =CV_BGR2RGB, | ||||
| 
 | ||||
|     CV_BGRA2RGBA   =5, | ||||
|     CV_RGBA2BGRA   =CV_BGRA2RGBA, | ||||
| 
 | ||||
|     CV_BGR2GRAY    =6, | ||||
|     CV_RGB2GRAY    =7, | ||||
|     CV_GRAY2BGR    =8, | ||||
|     CV_GRAY2RGB    =CV_GRAY2BGR, | ||||
|     CV_GRAY2BGRA   =9, | ||||
|     CV_GRAY2RGBA   =CV_GRAY2BGRA, | ||||
|     CV_BGRA2GRAY   =10, | ||||
|     CV_RGBA2GRAY   =11, | ||||
| 
 | ||||
|     CV_BGR2BGR565  =12, | ||||
|     CV_RGB2BGR565  =13, | ||||
|     CV_BGR5652BGR  =14, | ||||
|     CV_BGR5652RGB  =15, | ||||
|     CV_BGRA2BGR565 =16, | ||||
|     CV_RGBA2BGR565 =17, | ||||
|     CV_BGR5652BGRA =18, | ||||
|     CV_BGR5652RGBA =19, | ||||
| 
 | ||||
|     CV_GRAY2BGR565 =20, | ||||
|     CV_BGR5652GRAY =21, | ||||
| 
 | ||||
|     CV_BGR2BGR555  =22, | ||||
|     CV_RGB2BGR555  =23, | ||||
|     CV_BGR5552BGR  =24, | ||||
|     CV_BGR5552RGB  =25, | ||||
|     CV_BGRA2BGR555 =26, | ||||
|     CV_RGBA2BGR555 =27, | ||||
|     CV_BGR5552BGRA =28, | ||||
|     CV_BGR5552RGBA =29, | ||||
| 
 | ||||
|     CV_GRAY2BGR555 =30, | ||||
|     CV_BGR5552GRAY =31, | ||||
| 
 | ||||
|     CV_BGR2XYZ     =32, | ||||
|     CV_RGB2XYZ     =33, | ||||
|     CV_XYZ2BGR     =34, | ||||
|     CV_XYZ2RGB     =35, | ||||
| 
 | ||||
|     CV_BGR2YCrCb   =36, | ||||
|     CV_RGB2YCrCb   =37, | ||||
|     CV_YCrCb2BGR   =38, | ||||
|     CV_YCrCb2RGB   =39, | ||||
| 
 | ||||
|     CV_BGR2HSV     =40, | ||||
|     CV_RGB2HSV     =41, | ||||
| 
 | ||||
|     CV_BGR2Lab     =44, | ||||
|     CV_RGB2Lab     =45, | ||||
| 
 | ||||
|     CV_BayerBG2BGR =46, | ||||
|     CV_BayerGB2BGR =47, | ||||
|     CV_BayerRG2BGR =48, | ||||
|     CV_BayerGR2BGR =49, | ||||
| 
 | ||||
|     CV_BayerBG2RGB =CV_BayerRG2BGR, | ||||
|     CV_BayerGB2RGB =CV_BayerGR2BGR, | ||||
|     CV_BayerRG2RGB =CV_BayerBG2BGR, | ||||
|     CV_BayerGR2RGB =CV_BayerGB2BGR, | ||||
| 
 | ||||
|     CV_BGR2Luv     =50, | ||||
|     CV_RGB2Luv     =51, | ||||
|     CV_BGR2HLS     =52, | ||||
|     CV_RGB2HLS     =53, | ||||
| 
 | ||||
|     CV_HSV2BGR     =54, | ||||
|     CV_HSV2RGB     =55, | ||||
| 
 | ||||
|     CV_Lab2BGR     =56, | ||||
|     CV_Lab2RGB     =57, | ||||
|     CV_Luv2BGR     =58, | ||||
|     CV_Luv2RGB     =59, | ||||
|     CV_HLS2BGR     =60, | ||||
|     CV_HLS2RGB     =61, | ||||
| 
 | ||||
|     CV_BayerBG2BGR_VNG =62, | ||||
|     CV_BayerGB2BGR_VNG =63, | ||||
|     CV_BayerRG2BGR_VNG =64, | ||||
|     CV_BayerGR2BGR_VNG =65, | ||||
| 
 | ||||
|     CV_BayerBG2RGB_VNG =CV_BayerRG2BGR_VNG, | ||||
|     CV_BayerGB2RGB_VNG =CV_BayerGR2BGR_VNG, | ||||
|     CV_BayerRG2RGB_VNG =CV_BayerBG2BGR_VNG, | ||||
|     CV_BayerGR2RGB_VNG =CV_BayerGB2BGR_VNG, | ||||
| 
 | ||||
|     CV_BGR2HSV_FULL = 66, | ||||
|     CV_RGB2HSV_FULL = 67, | ||||
|     CV_BGR2HLS_FULL = 68, | ||||
|     CV_RGB2HLS_FULL = 69, | ||||
| 
 | ||||
|     CV_HSV2BGR_FULL = 70, | ||||
|     CV_HSV2RGB_FULL = 71, | ||||
|     CV_HLS2BGR_FULL = 72, | ||||
|     CV_HLS2RGB_FULL = 73, | ||||
| 
 | ||||
|     CV_LBGR2Lab     = 74, | ||||
|     CV_LRGB2Lab     = 75, | ||||
|     CV_LBGR2Luv     = 76, | ||||
|     CV_LRGB2Luv     = 77, | ||||
| 
 | ||||
|     CV_Lab2LBGR     = 78, | ||||
|     CV_Lab2LRGB     = 79, | ||||
|     CV_Luv2LBGR     = 80, | ||||
|     CV_Luv2LRGB     = 81, | ||||
| 
 | ||||
|     CV_BGR2YUV      = 82, | ||||
|     CV_RGB2YUV      = 83, | ||||
|     CV_YUV2BGR      = 84, | ||||
|     CV_YUV2RGB      = 85, | ||||
| 
 | ||||
|     CV_BayerBG2GRAY = 86, | ||||
|     CV_BayerGB2GRAY = 87, | ||||
|     CV_BayerRG2GRAY = 88, | ||||
|     CV_BayerGR2GRAY = 89, | ||||
| 
 | ||||
|     //YUV 4:2:0 formats family
 | ||||
|     CV_YUV2RGB_NV12 = 90, | ||||
|     CV_YUV2BGR_NV12 = 91, | ||||
|     CV_YUV2RGB_NV21 = 92, | ||||
|     CV_YUV2BGR_NV21 = 93, | ||||
|     CV_YUV420sp2RGB = CV_YUV2RGB_NV21, | ||||
|     CV_YUV420sp2BGR = CV_YUV2BGR_NV21, | ||||
| 
 | ||||
|     CV_YUV2RGBA_NV12 = 94, | ||||
|     CV_YUV2BGRA_NV12 = 95, | ||||
|     CV_YUV2RGBA_NV21 = 96, | ||||
|     CV_YUV2BGRA_NV21 = 97, | ||||
|     CV_YUV420sp2RGBA = CV_YUV2RGBA_NV21, | ||||
|     CV_YUV420sp2BGRA = CV_YUV2BGRA_NV21, | ||||
| 
 | ||||
|     CV_YUV2RGB_YV12 = 98, | ||||
|     CV_YUV2BGR_YV12 = 99, | ||||
|     CV_YUV2RGB_IYUV = 100, | ||||
|     CV_YUV2BGR_IYUV = 101, | ||||
|     CV_YUV2RGB_I420 = CV_YUV2RGB_IYUV, | ||||
|     CV_YUV2BGR_I420 = CV_YUV2BGR_IYUV, | ||||
|     CV_YUV420p2RGB = CV_YUV2RGB_YV12, | ||||
|     CV_YUV420p2BGR = CV_YUV2BGR_YV12, | ||||
| 
 | ||||
|     CV_YUV2RGBA_YV12 = 102, | ||||
|     CV_YUV2BGRA_YV12 = 103, | ||||
|     CV_YUV2RGBA_IYUV = 104, | ||||
|     CV_YUV2BGRA_IYUV = 105, | ||||
|     CV_YUV2RGBA_I420 = CV_YUV2RGBA_IYUV, | ||||
|     CV_YUV2BGRA_I420 = CV_YUV2BGRA_IYUV, | ||||
|     CV_YUV420p2RGBA = CV_YUV2RGBA_YV12, | ||||
|     CV_YUV420p2BGRA = CV_YUV2BGRA_YV12, | ||||
| 
 | ||||
|     CV_YUV2GRAY_420 = 106, | ||||
|     CV_YUV2GRAY_NV21 = CV_YUV2GRAY_420, | ||||
|     CV_YUV2GRAY_NV12 = CV_YUV2GRAY_420, | ||||
|     CV_YUV2GRAY_YV12 = CV_YUV2GRAY_420, | ||||
|     CV_YUV2GRAY_IYUV = CV_YUV2GRAY_420, | ||||
|     CV_YUV2GRAY_I420 = CV_YUV2GRAY_420, | ||||
|     CV_YUV420sp2GRAY = CV_YUV2GRAY_420, | ||||
|     CV_YUV420p2GRAY = CV_YUV2GRAY_420, | ||||
| 
 | ||||
|     //YUV 4:2:2 formats family
 | ||||
|     CV_YUV2RGB_UYVY = 107, | ||||
|     CV_YUV2BGR_UYVY = 108, | ||||
|     //CV_YUV2RGB_VYUY = 109,
 | ||||
|     //CV_YUV2BGR_VYUY = 110,
 | ||||
|     CV_YUV2RGB_Y422 = CV_YUV2RGB_UYVY, | ||||
|     CV_YUV2BGR_Y422 = CV_YUV2BGR_UYVY, | ||||
|     CV_YUV2RGB_UYNV = CV_YUV2RGB_UYVY, | ||||
|     CV_YUV2BGR_UYNV = CV_YUV2BGR_UYVY, | ||||
| 
 | ||||
|     CV_YUV2RGBA_UYVY = 111, | ||||
|     CV_YUV2BGRA_UYVY = 112, | ||||
|     //CV_YUV2RGBA_VYUY = 113,
 | ||||
|     //CV_YUV2BGRA_VYUY = 114,
 | ||||
|     CV_YUV2RGBA_Y422 = CV_YUV2RGBA_UYVY, | ||||
|     CV_YUV2BGRA_Y422 = CV_YUV2BGRA_UYVY, | ||||
|     CV_YUV2RGBA_UYNV = CV_YUV2RGBA_UYVY, | ||||
|     CV_YUV2BGRA_UYNV = CV_YUV2BGRA_UYVY, | ||||
| 
 | ||||
|     CV_YUV2RGB_YUY2 = 115, | ||||
|     CV_YUV2BGR_YUY2 = 116, | ||||
|     CV_YUV2RGB_YVYU = 117, | ||||
|     CV_YUV2BGR_YVYU = 118, | ||||
|     CV_YUV2RGB_YUYV = CV_YUV2RGB_YUY2, | ||||
|     CV_YUV2BGR_YUYV = CV_YUV2BGR_YUY2, | ||||
|     CV_YUV2RGB_YUNV = CV_YUV2RGB_YUY2, | ||||
|     CV_YUV2BGR_YUNV = CV_YUV2BGR_YUY2, | ||||
| 
 | ||||
|     CV_YUV2RGBA_YUY2 = 119, | ||||
|     CV_YUV2BGRA_YUY2 = 120, | ||||
|     CV_YUV2RGBA_YVYU = 121, | ||||
|     CV_YUV2BGRA_YVYU = 122, | ||||
|     CV_YUV2RGBA_YUYV = CV_YUV2RGBA_YUY2, | ||||
|     CV_YUV2BGRA_YUYV = CV_YUV2BGRA_YUY2, | ||||
|     CV_YUV2RGBA_YUNV = CV_YUV2RGBA_YUY2, | ||||
|     CV_YUV2BGRA_YUNV = CV_YUV2BGRA_YUY2, | ||||
| 
 | ||||
|     CV_YUV2GRAY_UYVY = 123, | ||||
|     CV_YUV2GRAY_YUY2 = 124, | ||||
|     //CV_YUV2GRAY_VYUY = CV_YUV2GRAY_UYVY,
 | ||||
|     CV_YUV2GRAY_Y422 = CV_YUV2GRAY_UYVY, | ||||
|     CV_YUV2GRAY_UYNV = CV_YUV2GRAY_UYVY, | ||||
|     CV_YUV2GRAY_YVYU = CV_YUV2GRAY_YUY2, | ||||
|     CV_YUV2GRAY_YUYV = CV_YUV2GRAY_YUY2, | ||||
|     CV_YUV2GRAY_YUNV = CV_YUV2GRAY_YUY2, | ||||
| 
 | ||||
|     // alpha premultiplication
 | ||||
|     CV_RGBA2mRGBA = 125, | ||||
|     CV_mRGBA2RGBA = 126, | ||||
| 
 | ||||
|     CV_RGB2YUV_I420 = 127, | ||||
|     CV_BGR2YUV_I420 = 128, | ||||
|     CV_RGB2YUV_IYUV = CV_RGB2YUV_I420, | ||||
|     CV_BGR2YUV_IYUV = CV_BGR2YUV_I420, | ||||
| 
 | ||||
|     CV_RGBA2YUV_I420 = 129, | ||||
|     CV_BGRA2YUV_I420 = 130, | ||||
|     CV_RGBA2YUV_IYUV = CV_RGBA2YUV_I420, | ||||
|     CV_BGRA2YUV_IYUV = CV_BGRA2YUV_I420, | ||||
|     CV_RGB2YUV_YV12  = 131, | ||||
|     CV_BGR2YUV_YV12  = 132, | ||||
|     CV_RGBA2YUV_YV12 = 133, | ||||
|     CV_BGRA2YUV_YV12 = 134, | ||||
| 
 | ||||
|     CV_COLORCVT_MAX  = 135 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* Sub-pixel interpolation methods */ | ||||
| enum | ||||
| { | ||||
|     CV_INTER_NN        =0, | ||||
|     CV_INTER_LINEAR    =1, | ||||
|     CV_INTER_CUBIC     =2, | ||||
|     CV_INTER_AREA      =3, | ||||
|     CV_INTER_LANCZOS4  =4 | ||||
| }; | ||||
| 
 | ||||
| /* ... and other image warping flags */ | ||||
| enum | ||||
| { | ||||
|     CV_WARP_FILL_OUTLIERS =8, | ||||
|     CV_WARP_INVERSE_MAP  =16 | ||||
| }; | ||||
| 
 | ||||
| /* Shapes of a structuring element for morphological operations */ | ||||
| enum | ||||
| { | ||||
|     CV_SHAPE_RECT      =0, | ||||
|     CV_SHAPE_CROSS     =1, | ||||
|     CV_SHAPE_ELLIPSE   =2, | ||||
|     CV_SHAPE_CUSTOM    =100 | ||||
| }; | ||||
| 
 | ||||
| /* Morphological operations */ | ||||
| enum | ||||
| { | ||||
|     CV_MOP_ERODE        =0, | ||||
|     CV_MOP_DILATE       =1, | ||||
|     CV_MOP_OPEN         =2, | ||||
|     CV_MOP_CLOSE        =3, | ||||
|     CV_MOP_GRADIENT     =4, | ||||
|     CV_MOP_TOPHAT       =5, | ||||
|     CV_MOP_BLACKHAT     =6 | ||||
| }; | ||||
| 
 | ||||
| /* Spatial and central moments */ | ||||
| typedef struct CvMoments | ||||
| { | ||||
|     double  m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; /* spatial moments */ | ||||
|     double  mu20, mu11, mu02, mu30, mu21, mu12, mu03; /* central moments */ | ||||
|     double  inv_sqrt_m00; /* m00 != 0 ? 1/sqrt(m00) : 0 */ | ||||
| } | ||||
| CvMoments; | ||||
| 
 | ||||
| /* Hu invariants */ | ||||
| typedef struct CvHuMoments | ||||
| { | ||||
|     double hu1, hu2, hu3, hu4, hu5, hu6, hu7; /* Hu invariants */ | ||||
| } | ||||
| CvHuMoments; | ||||
| 
 | ||||
| /* Template matching methods */ | ||||
| enum | ||||
| { | ||||
|     CV_TM_SQDIFF        =0, | ||||
|     CV_TM_SQDIFF_NORMED =1, | ||||
|     CV_TM_CCORR         =2, | ||||
|     CV_TM_CCORR_NORMED  =3, | ||||
|     CV_TM_CCOEFF        =4, | ||||
|     CV_TM_CCOEFF_NORMED =5 | ||||
| }; | ||||
| 
 | ||||
| typedef float (CV_CDECL * CvDistanceFunction)( const float* a, const float* b, void* user_param ); | ||||
| 
 | ||||
| /* Contour retrieval modes */ | ||||
| enum | ||||
| { | ||||
|     CV_RETR_EXTERNAL=0, | ||||
|     CV_RETR_LIST=1, | ||||
|     CV_RETR_CCOMP=2, | ||||
|     CV_RETR_TREE=3, | ||||
|     CV_RETR_FLOODFILL=4 | ||||
| }; | ||||
| 
 | ||||
| /* Contour approximation methods */ | ||||
| enum | ||||
| { | ||||
|     CV_CHAIN_CODE=0, | ||||
|     CV_CHAIN_APPROX_NONE=1, | ||||
|     CV_CHAIN_APPROX_SIMPLE=2, | ||||
|     CV_CHAIN_APPROX_TC89_L1=3, | ||||
|     CV_CHAIN_APPROX_TC89_KCOS=4, | ||||
|     CV_LINK_RUNS=5 | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
| Internal structure that is used for sequental retrieving contours from the image. | ||||
| It supports both hierarchical and plane variants of Suzuki algorithm. | ||||
| */ | ||||
| typedef struct _CvContourScanner* CvContourScanner; | ||||
| 
 | ||||
| /* Freeman chain reader state */ | ||||
| typedef struct CvChainPtReader | ||||
| { | ||||
|     CV_SEQ_READER_FIELDS() | ||||
|     char      code; | ||||
|     CvPoint   pt; | ||||
|     schar     deltas[8][2]; | ||||
| } | ||||
| CvChainPtReader; | ||||
| 
 | ||||
| /* initializes 8-element array for fast access to 3x3 neighborhood of a pixel */ | ||||
| #define  CV_INIT_3X3_DELTAS( deltas, step, nch )            \ | ||||
|     ((deltas)[0] =  (nch),  (deltas)[1] = -(step) + (nch),  \
 | ||||
|      (deltas)[2] = -(step), (deltas)[3] = -(step) - (nch),  \
 | ||||
|      (deltas)[4] = -(nch),  (deltas)[5] =  (step) - (nch),  \
 | ||||
|      (deltas)[6] =  (step), (deltas)[7] =  (step) + (nch)) | ||||
| 
 | ||||
| 
 | ||||
| /****************************************************************************************\
 | ||||
| *                              Planar subdivisions                                       * | ||||
| \****************************************************************************************/ | ||||
| 
 | ||||
| typedef size_t CvSubdiv2DEdge; | ||||
| 
 | ||||
| #define CV_QUADEDGE2D_FIELDS()     \ | ||||
|     int flags;                     \
 | ||||
|     struct CvSubdiv2DPoint* pt[4]; \
 | ||||
|     CvSubdiv2DEdge  next[4]; | ||||
| 
 | ||||
| #define CV_SUBDIV2D_POINT_FIELDS()\ | ||||
|     int            flags;      \
 | ||||
|     CvSubdiv2DEdge first;      \
 | ||||
|     CvPoint2D32f   pt;         \
 | ||||
|     int id; | ||||
| 
 | ||||
| #define CV_SUBDIV2D_VIRTUAL_POINT_FLAG (1 << 30) | ||||
| 
 | ||||
| typedef struct CvQuadEdge2D | ||||
| { | ||||
|     CV_QUADEDGE2D_FIELDS() | ||||
| } | ||||
| CvQuadEdge2D; | ||||
| 
 | ||||
| typedef struct CvSubdiv2DPoint | ||||
| { | ||||
|     CV_SUBDIV2D_POINT_FIELDS() | ||||
| } | ||||
| CvSubdiv2DPoint; | ||||
| 
 | ||||
| #define CV_SUBDIV2D_FIELDS()    \ | ||||
|     CV_GRAPH_FIELDS()           \
 | ||||
|     int  quad_edges;            \
 | ||||
|     int  is_geometry_valid;     \
 | ||||
|     CvSubdiv2DEdge recent_edge; \
 | ||||
|     CvPoint2D32f  topleft;      \
 | ||||
|     CvPoint2D32f  bottomright; | ||||
| 
 | ||||
| typedef struct CvSubdiv2D | ||||
| { | ||||
|     CV_SUBDIV2D_FIELDS() | ||||
| } | ||||
| CvSubdiv2D; | ||||
| 
 | ||||
| 
 | ||||
| typedef enum CvSubdiv2DPointLocation | ||||
| { | ||||
|     CV_PTLOC_ERROR = -2, | ||||
|     CV_PTLOC_OUTSIDE_RECT = -1, | ||||
|     CV_PTLOC_INSIDE = 0, | ||||
|     CV_PTLOC_VERTEX = 1, | ||||
|     CV_PTLOC_ON_EDGE = 2 | ||||
| } | ||||
| CvSubdiv2DPointLocation; | ||||
| 
 | ||||
| typedef enum CvNextEdgeType | ||||
| { | ||||
|     CV_NEXT_AROUND_ORG   = 0x00, | ||||
|     CV_NEXT_AROUND_DST   = 0x22, | ||||
|     CV_PREV_AROUND_ORG   = 0x11, | ||||
|     CV_PREV_AROUND_DST   = 0x33, | ||||
|     CV_NEXT_AROUND_LEFT  = 0x13, | ||||
|     CV_NEXT_AROUND_RIGHT = 0x31, | ||||
|     CV_PREV_AROUND_LEFT  = 0x20, | ||||
|     CV_PREV_AROUND_RIGHT = 0x02 | ||||
| } | ||||
| CvNextEdgeType; | ||||
| 
 | ||||
| /* get the next edge with the same origin point (counterwise) */ | ||||
| #define  CV_SUBDIV2D_NEXT_EDGE( edge )  (((CvQuadEdge2D*)((edge) & ~3))->next[(edge)&3]) | ||||
| 
 | ||||
| 
 | ||||
| /* Contour approximation algorithms */ | ||||
| enum | ||||
| { | ||||
|     CV_POLY_APPROX_DP = 0 | ||||
| }; | ||||
| 
 | ||||
| /* Shape matching methods */ | ||||
| enum | ||||
| { | ||||
|     CV_CONTOURS_MATCH_I1  =1, | ||||
|     CV_CONTOURS_MATCH_I2  =2, | ||||
|     CV_CONTOURS_MATCH_I3  =3 | ||||
| }; | ||||
| 
 | ||||
| /* Shape orientation */ | ||||
| enum | ||||
| { | ||||
|     CV_CLOCKWISE         =1, | ||||
|     CV_COUNTER_CLOCKWISE =2 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* Convexity defect */ | ||||
| typedef struct CvConvexityDefect | ||||
| { | ||||
|     CvPoint* start; /* point of the contour where the defect begins */ | ||||
|     CvPoint* end; /* point of the contour where the defect ends */ | ||||
|     CvPoint* depth_point; /* the farthest from the convex hull point within the defect */ | ||||
|     float depth; /* distance between the farthest point and the convex hull */ | ||||
| } CvConvexityDefect; | ||||
| 
 | ||||
| 
 | ||||
| /* Histogram comparison methods */ | ||||
| enum | ||||
| { | ||||
|     CV_COMP_CORREL        =0, | ||||
|     CV_COMP_CHISQR        =1, | ||||
|     CV_COMP_INTERSECT     =2, | ||||
|     CV_COMP_BHATTACHARYYA =3, | ||||
|     CV_COMP_HELLINGER     =CV_COMP_BHATTACHARYYA | ||||
| }; | ||||
| 
 | ||||
| /* Mask size for distance transform */ | ||||
| enum | ||||
| { | ||||
|     CV_DIST_MASK_3   =3, | ||||
|     CV_DIST_MASK_5   =5, | ||||
|     CV_DIST_MASK_PRECISE =0 | ||||
| }; | ||||
| 
 | ||||
| /* Content of output label array: connected components or pixels */ | ||||
| enum | ||||
| { | ||||
|   CV_DIST_LABEL_CCOMP = 0, | ||||
|   CV_DIST_LABEL_PIXEL = 1 | ||||
| }; | ||||
| 
 | ||||
| /* Distance types for Distance Transform and M-estimators */ | ||||
| enum | ||||
| { | ||||
|     CV_DIST_USER    =-1,  /* User defined distance */ | ||||
|     CV_DIST_L1      =1,   /* distance = |x1-x2| + |y1-y2| */ | ||||
|     CV_DIST_L2      =2,   /* the simple euclidean distance */ | ||||
|     CV_DIST_C       =3,   /* distance = max(|x1-x2|,|y1-y2|) */ | ||||
|     CV_DIST_L12     =4,   /* L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */ | ||||
|     CV_DIST_FAIR    =5,   /* distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */ | ||||
|     CV_DIST_WELSCH  =6,   /* distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */ | ||||
|     CV_DIST_HUBER   =7    /* distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */ | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* Threshold types */ | ||||
| enum | ||||
| { | ||||
|     CV_THRESH_BINARY      =0,  /* value = value > threshold ? max_value : 0       */ | ||||
|     CV_THRESH_BINARY_INV  =1,  /* value = value > threshold ? 0 : max_value       */ | ||||
|     CV_THRESH_TRUNC       =2,  /* value = value > threshold ? threshold : value   */ | ||||
|     CV_THRESH_TOZERO      =3,  /* value = value > threshold ? value : 0           */ | ||||
|     CV_THRESH_TOZERO_INV  =4,  /* value = value > threshold ? 0 : value           */ | ||||
|     CV_THRESH_MASK        =7, | ||||
|     CV_THRESH_OTSU        =8  /* use Otsu algorithm to choose the optimal threshold value;
 | ||||
|                                  combine the flag with one of the above CV_THRESH_* values */ | ||||
| }; | ||||
| 
 | ||||
| /* Adaptive threshold methods */ | ||||
| enum | ||||
| { | ||||
|     CV_ADAPTIVE_THRESH_MEAN_C  =0, | ||||
|     CV_ADAPTIVE_THRESH_GAUSSIAN_C  =1 | ||||
| }; | ||||
| 
 | ||||
| /* FloodFill flags */ | ||||
| enum | ||||
| { | ||||
|     CV_FLOODFILL_FIXED_RANGE =(1 << 16), | ||||
|     CV_FLOODFILL_MASK_ONLY   =(1 << 17) | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* Canny edge detector flags */ | ||||
| enum | ||||
| { | ||||
|     CV_CANNY_L2_GRADIENT  =(1 << 31) | ||||
| }; | ||||
| 
 | ||||
| /* Variants of a Hough transform */ | ||||
| enum | ||||
| { | ||||
|     CV_HOUGH_STANDARD =0, | ||||
|     CV_HOUGH_PROBABILISTIC =1, | ||||
|     CV_HOUGH_MULTI_SCALE =2, | ||||
|     CV_HOUGH_GRADIENT =3 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* Fast search data structures  */ | ||||
| struct CvFeatureTree; | ||||
| struct CvLSH; | ||||
| struct CvLSHOperations; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
					Loading…
					
					
				
		Reference in new issue