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