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