【OpenCV学習】OpenCVのデータ型
OpenCVには多くのデータ型があり、それらはいくつかの重要な視覚概念の抽象に基づいて設計され、比較的簡単で直感的な表現と処理を提供する.
組織構造の観点からOpenCVの基礎データ型は主に3種類に分類される
第1のクラスは、簡単な配列と行列を含むC++原語から直接継承される基礎データ型(intやfloatなど)である.
第2のクラスでは、ゴミ収集ポインタなどのより抽象的な概念を表す補助オブジェクト、データスライスの範囲オブジェクト(range objects)
第3のクラスは、大規模な配列タイプであり、典型的にはcv::Matクラスであり、任意の次元の任意の基礎要素を含む配列を表すために使用される.
これら以外にもOpenCVには標準テンプレートライブラリ(STL)がたくさんあります.
ベース・タイプの説明
各ベース・タイプは、実際には比較的複雑なクラスであり、独自のインタフェース関数、リロード、および類似の操作をサポートします.
1.Pointクラス
このクラスはOpenCVのベースタイプで、ポイントは最も簡単で、ポイントテンプレートクラスである可能性があります.
これらは、整数型や浮動小数点型などの任意のタイプの点となり、2 DポイントテンプレートクラスPoint_に分けられます.3 DポイントテンプレートクラスPoint 3_と、ソースコードには次のように定義されています.
typedef Point_ Point2i;
typedef Point2i Point;
typedef Point_ Point2f;
typedef Point_ Point2d;
typedef Point3_ Point3i;
typedef Point3_ Point3f;
typedef Point3_ Point3d;
,Point cv::Point2i cv:Point3f , :
- b
- s
- i 32
- f 32
- d 64
Point :
cv::Point2i p;
cv::Point3i p;
cv::Point3f p2(p1);
cv::Point2i(x0, x1);
cv::Point3d p(x0,x1,x2);
(cv::Vec3f) p;
p.x, p.y;
float x = p1.dot(p2);
double y = p1.dot(p2);
p1.cross(p2);
p r
p.inside(r);
:
Point point;// 2D
point.x = 10;// x
point.y = 8;// y
Point point = Point(10, 8);
2.Scalar
cv::Scalar 。 , 。 :
template class Scalar_ : public Vec<_tp>
{
public:
//! default constructor
Scalar_();
Scalar_(_Tp v0, _Tp v1, _Tp v2=0, _Tp v3=0);
Scalar_(_Tp v0);
Scalar_(const Scalar_& s);
Scalar_(Scalar_&& s) CV_NOEXCEPT;
Scalar_& operator=(const Scalar_& s);
Scalar_& operator=(Scalar_&& s) CV_NOEXCEPT;
template
Scalar_(const Vec<_tp2 cn="">& v);
//! returns a scalar with all elements set to v0
static Scalar_<_tp> all(_Tp v0);
//! conversion to another data type
template operator Scalar_() const;
//! per-element product
Scalar_<_tp> mul(const Scalar_<_tp>& a, double scale=1 ) const;
//! returns (v0, -v1, -v2, -v3)
Scalar_<_tp> conj() const;
//! returns true iff v1 == v2 == v3 == 0
bool isReal() const;
};
cv::Scalar
cv::Scalar s;
cv::Scalar s2(s1);
cv::Scalar s(x0); cv::Scalar s(x0, x1, x2, x3);
s1.mul(s2);
( )
s.conj();// return cv::Scalar(s0, -s1, -s2, -s3);
( )
s.isReal();// return true, if s1==s2==s3==s4
Scalar , 。
3.Size
Size Point , Point , Point x y, size width height。
Size cv::Size, cv::Size2i, cv::Size2f. , 32 。
Size OpenCV (CvSize CvSizeD32f)
Size :
cv::Size sz;
cv::Size2i sz;
cv::SIze2f sz;
cv::Size sz2(sz1);
cv::Size2f sz(w, h);
sz.width, sz.height;
sz.area();
Size , Point Size
4.Rect
Point x y( ) Size width height( )。
Point Size() ,
Rect :
cv::Rect r;
cv::Rect r2(r1);
cv::Rect(x,y,w,h);
cv::Rect(p, sz);// point size
cv::Rect(p1, p2);
r.x, r.y, r.width, r.height;
r.area();
r.tl();
r.br();
p
r.contains(p);
cv::Rect cv::CvRect 。cv::Rect 。
cv::Rect ( ), :
r1 r2
cv::Rect r3 = r1 & r2; r1 &= r2;
r1 r2
cv::Rect r3 = r1 | r2; r1 |= r2;
r x
cv::Rect rx = r + x; r += x;
r s
cv::Rect rs = r + s; r += s;
r1 r2
bool eq = (r1 == r2);
r1 r2
bool eq = (r1 != r2);
5.RotatedRect
cv::RotatedRect OpenCV C++ , cv::Point2f, cv::Size2f float 。
。
RotatedRect Rect 。, Rect 。
RotatedRect :
cv::RotatedRect rr();
cv::RotatedRect rr2(rr1);
cv::RotatedRect(p1, p2);
, , size
cv::RotatedRect(p, sz, theta);
rr.center,rr.size,rr.rangle
rr.point(pts[4]);
6.
, , 。
OpenCV C++ 。
, , , 。
, cv::Matx<>, , cv::Matx{1,2,...}{1,2...}{f,d}, 1 6 。
, , , , cv::Mat。
,
Matx :
cv::Matx33f m33f;cv::Matx43d m43d;
cv::Matx22d m22d(n22d);
cv::Matx21f m(x0, x1);
cv::Matx44d m(x0, x1, x2, x3, ..., x15);
m33f = cv::Matx33f::all(x);
m23d = cv::Matx23d::zeros();
m16f = cv:;Matx16f::ones();
m33f = cv::Matx33f::eye():
m31f = cv::Matx33f::diag();
m33f = cv::Matx33f::randu(min, max);
m33f = cv::Matx33f:nrandn(mean, variance);
m(i, j), m(i);
m1 = m0; m0 * m1; m0 + m1; m0 -m1;
m * a, a * m, m / a;
m1 == m2; m1 != m2;
m1.dot(m2);m1.ddot(m2);
m91f = m33f.reshape<9,1>();
m44f = (Matx44f) m44d;
(i,j) 2*2
m44f.get_minor<2, 2>(i, j);
i
m14f = m44f.row(i);
j
m41f = m44.col(j);
m41f = m44f.diag();
n44f = m44f.t();
n44f = m44f.inv(method);
m31f = m33f.solve(rhs31f, method);
m32f = m33f.solve(rhs32f, method);
m1.mul(m2);
7.
, cv::Matx<>。
C++ , cv::Vec 1 cv::Matx<>。
Vec :
Vec2s v2s; Vec6f v6f;
Vec3f u3f(v3f);
Vec2f v2f(x0, x1); Vec6d v6d(x0, x1, x2, x3, x4, x5);
v4f[i]; v3w(j);
v3f.cross(u3f);
, 。
8.
OpenCV , 。OpenCV STL complex<> , 。 。
STL , real() imag() , OpenCV re im 。
OpenCV :
cv::Complexf z1; cv::Comlexd z2;
cv::Complexf z2(z1);
cv::Complexd z1(re0); cv::Complexd(re0, im1_;
cv::Complexd u2f(v2f);
z1.re; z1.im;
z2 = z1.conj();
, ,cv::Complexf cv::Complexd .