1、OpenCV的數(shù)據(jù)類型
- 根據(jù)組織結(jié)構(gòu),OpenCV的數(shù)據(jù)類型主頁分成三類:直接從C=++原語中繼承的基本數(shù)據(jù)類型,如int、float、數(shù)組、矩陣等;輔助對(duì)象,如垃圾收集指針類、用于數(shù)據(jù)切片的范圍對(duì)象、抽象的終止條件等;大型數(shù)組類型,如cv::Mat、cv::SparseMat。
- 基本數(shù)據(jù)類型:cv::Point、cv::Size、cv::Rect、cv::RotateRect、固定矩形類cv::Matx、固定向量類cv::Vec、cv::Scalar。
- 訪問成員:cv::Point、cv::Size、cv::Rect、cv::RotateRect通過變量名訪問,如p.x、p.y等;固定向量類cv::Vec、cv::Scalar、固定矩形類cv::Matx通過下標(biāo)訪問,如myvec[0]、myscalar[2]。
- 類型別名中的原語:b(unsigned int)、w(unsigned short int)、s(short int)、i(int)、f(float)、d(double)。
2、基本數(shù)據(jù)類型
| 基本數(shù)據(jù)類型 | 別名格式 |
|---|---|
| cv::Point | cv::Point{2,3}{i,f,d} |
| cv::Size | cv::Size2{i,f} |
| cv::Rect | cv::Rect |
| cv::RotateRect | cv::RotateRect |
| cv::Complex | cv::Complex{f,d} |
| cv::Matx | cv::Matx{1,2,3,4,6}{f,d} |
| cv::Vec | cv::cv::Vec{2,3,4,6}{b,s,w,i,f,d} |
| cv::Scalar | cv::Scalar |
| cv::Point類支持的操作 | 示例 |
|---|---|
| 默認(rèn)構(gòu)造函數(shù) |
cv::Point2i pcv::Point3i p
|
| 復(fù)制構(gòu)造函數(shù) | cv::Point3f p2(p1) |
| 值構(gòu)造函數(shù) |
cv::Pointf2i p(x0,x1)cv::Pointf3d p(x0,x1,x2)
|
| 構(gòu)造成固定向量類 | (cv::Vec3f) p |
| 成員訪問 | p.x p.y p.z |
| 點(diǎn)乘 |
float x = p1.dot(p2)double x = p1.ddot(p2)
|
| 叉乘 | p1.cross(p2) |
| 判斷一個(gè)點(diǎn)是否在矩形r內(nèi) | p.inside(r) |
| cv::Size類支持的操作 | 示例 |
|---|---|
| 默認(rèn)構(gòu)造函數(shù) |
cv::Size szcv::Size2i szcv::Size2f sz
|
| 復(fù)制構(gòu)造函數(shù) | cv::Size sz2(sz1) |
| 值構(gòu)造函數(shù) | cv::Size2f sz(w,h) |
| 成員訪問 | sz.width sz.height |
| 計(jì)算面積 | sz.area() |
| cv::Rect類支持的操作 | 示例 |
|---|---|
| 默認(rèn)構(gòu)造函數(shù) | cv::Rect r |
| 復(fù)制構(gòu)造函數(shù) | cv::Rect r2(r1) |
| 值構(gòu)造函數(shù) | cv::Rect r(x,y,w,h) |
| 由起始點(diǎn)和大小構(gòu)造 | cv::Rect r(p,sz) |
| 由兩個(gè)對(duì)角構(gòu)造 | cv::Rect r(p1,p2) |
| 成員訪問 | r.x r.y r.width r.height |
| 計(jì)算面積 | r.area() |
| 提取左上角 | r.tl() |
| 提取右下角 | r.bl() |
| 判斷點(diǎn)p是否在矩形r內(nèi) | r.contains(p) |
| cv::Rect類的覆寫操作符 | 示例 |
|---|---|
| 矩形r1和矩形r2的交集 |
cv::Rect r3 = r1 & r2r1 &= r2
|
| 同時(shí)包含矩形r1和矩形r2的最小面積矩形 |
cv::Rect r3 = r1 | r2r1 |= r2
|
| 矩形r平移x |
cv::Rect r2 = r1 + xr1 += x
|
| 矩形r擴(kuò)大s |
cv::Rect r2 = r1 + sr1 += s
|
| 比較矩形r1和矩形r2是否相等 | bool eq = (r1 == r2) |
| 比較矩形r1和矩形r2是否不相等 | bool ne = (r1 != r2) |
| cv::RotateRect類支持的操作 | 示例 |
|---|---|
| 默認(rèn)構(gòu)造函數(shù) | cv::RotateRect rr() |
| 復(fù)制構(gòu)造函數(shù) | cv::RotateRect rr2(rr1) |
| 由兩個(gè)點(diǎn)構(gòu)造 | cv::RotateRect rr(p1,p2) |
| 值構(gòu)造函數(shù) | cv::Rect rr(p,sz,theta) |
| 成員訪問 | rr.center rr.size rr.angle |
| 返回四個(gè)角的列表 | rr.points(pts[4]) |
| cv::Complex類支持的操作 | 示例 |
|---|---|
| 默認(rèn)構(gòu)造函數(shù) |
cv::Complex z1cv::Complexd z2
|
| 復(fù)制構(gòu)造函數(shù) | cv::Complex z2(z1) |
| 值構(gòu)造函數(shù) |
cv::Complexd z(re)cv::Complexd z(re,im)
|
| 成員訪問 | z.re z.im |
| 復(fù)共軛 | z2 = z1.conj() |
| cv::Matx類支持的操作 | 示例 |
|---|---|
| 默認(rèn)構(gòu)造函數(shù) |
cv::Matx33f m33fcv::Matx43d m43d
|
| 復(fù)制構(gòu)造函數(shù) | cv::Matx22d m22d(n22d) |
| 值構(gòu)造函數(shù) |
cv::Matx21f m(x0,x1)cv::Matx23f m(x0,x1,x2,x3,x4,x5) //2行3列,從左到右,從上到下
|
| 含相同元素的矩陣 | m33f = cv::Matx33f::all(x) |
| 全零矩陣 | m23d = cv::Matx23d::zeros() |
| 全一矩陣 | m16f = cv::Matx16f::ones() |
| 單位矩陣 | m33f = cv::Matx33f::eye() |
| 創(chuàng)建可容納另一個(gè)矩陣對(duì)角線的矩陣 | m31f = cv::Matx33f::diag() |
| 創(chuàng)建一個(gè)均勻分布的矩陣 | m33f = cv::Matx33f::randu(min,max) |
| 創(chuàng)建一個(gè)正態(tài)分布的矩陣 | m33f = cv::Matx33f::nrandn(mean,variance) |
| 成員訪問 | m(i,j) m(i) |
| 矩陣代數(shù)運(yùn)算 | m1=m0 m0*m1 m0+m1 m0-m1 |
| singleton代數(shù) | m*a a*m m/a |
| 比較 | m1==m2 m1!=m2 |
| 點(diǎn)積 |
m1.dot(m2)m1.ddot(m2)
|
| 改變矩陣形狀 | m91f = m33f.reshape<9,1>() |
| 變換操作符 | m44f = (cv::Matx44f) m44d |
| 提取(i,j)處2*2的子矩陣 | m44f.get_minor<2,2>(i,j) |
| 提取第i行 | m14f = m44f.row(i) |
| 提取第j列 | m41f = m44f.col(j) |
| 提取矩陣對(duì)角線 | m41f = m44f.diag() |
| 計(jì)算轉(zhuǎn)置 | n44f = m44f.t() |
| 逆矩陣 | n44f = m44f.inv(method) |
| 解線性系統(tǒng) |
m31f = m33f.solve(rhs31f,method)m32f = m33f.solve<2>(rhs32f,method)
|
| 每個(gè)元素的乘法 | m1.mul(m2) |
| cv::Vec類支持的操作 | 示例 |
|---|---|
| 默認(rèn)構(gòu)造函數(shù) |
cv::Vec2s v2scv::Vec6f v6f
|
| 復(fù)制構(gòu)造函數(shù) | cv::Vec3f u3f(v3f) |
| 值構(gòu)造函數(shù) |
cv::Vec2f v2f(x0,x1)cv::Vec6d v6d(x0,x1,x2,x3,x4,x5)
|
| 成員訪問 | v4f[i] v3w[j] |
| 向量叉乘 | v3f.cross(u3f) |
| cv::Scalar類支持的操作 | 示例 |
|---|---|
| 默認(rèn)構(gòu)造函數(shù) | cv::Scalar s |
| 復(fù)制構(gòu)造函數(shù) | cv::Scalar s2(s1) |
| 值構(gòu)造函數(shù) |
cv::Scalar s(x0)cv::Scalar s(x,0,x1,x2,x3)
|
| 元素相乘 | s1.mul(s2) |
| 四元數(shù)共軛 | s.conj() |
| 四元數(shù)真值測試 | s.isReal() |
3、輔助對(duì)象
| 輔助對(duì)象 | 作用 |
|---|---|
| cv::TermCriteria |
cv::TermCriteria(int type, int maxCount, double epsilon)終止條件以確定何時(shí)退出 |
| cv::Range |
cv::Range(int start, int end)確定一個(gè)連續(xù)的整數(shù)序列 |
| cv::Ptr |
cv::Ptr<Matx33f> p(new cv::Matx33f)cv::Ptr<Matx33f> p = makePtr<cv::Matx33f>()智能指針 |
| cv::Exception |
CV_Error(errorcode, description)CV_Error_(errorcode, printf_mt_str, [printf-args])CV_Assert(condition)CV_DbgAssert(condition)拋出異常,處理錯(cuò)誤 |
| cv::DataType<> | 傳輸特定數(shù)據(jù)類型 |
| cv::InputArray cv::OutputArray cv::InputOutputArray cv::noArray |
常用于形參,可接受任意數(shù)組類型(如cv::Vec,cv::Mat等)作為初始值 |
4、工具函數(shù)
| 工具函數(shù)和系統(tǒng)函數(shù) | 描述 |
|---|---|
| cvCeil(x) | 對(duì)浮點(diǎn)數(shù)向上取整 |
| cvFloor(x) | 對(duì)浮點(diǎn)數(shù)向下取整 |
| cvRound(x) | 計(jì)算與浮點(diǎn)數(shù)最接近的整數(shù) |
| cvIsInf(x) | 判斷浮點(diǎn)數(shù)是否是正負(fù)無窮 |
| cvIsNan(x) | 判斷浮點(diǎn)數(shù)是否不是一個(gè)數(shù) |
| cv::fastAtan2(y,x) | 計(jì)算向量的二維角度(0~360) |
| cv::cubeRoot(x) | 計(jì)算立方根 |
| cv::format(fmt, ...) | 以sprintf類似,創(chuàng)建一個(gè)STL字符串 |
| cv::getOptimalDFTSize(n) | 計(jì)算傳遞給cv::dft()的數(shù)組的最適宜大小 |
| cv::alignPtr(ptr,n) | 對(duì)齊指針到給定字節(jié)數(shù) |
| cv::alignSize(sz,n) | 將緩沖區(qū)大小與給定的字節(jié)數(shù)對(duì)齊 |
| cv::allocate(sz) | 與new類似,分配一個(gè)C風(fēng)格的數(shù)組對(duì)象 |
| cv::deallocate(ptr, sz) | 與delete類似,釋放一個(gè)C風(fēng)格的數(shù)組對(duì)象 |
| cv::fastMalloc(size) | 與malloc類似,分配一個(gè)對(duì)齊的內(nèi)存緩沖區(qū) |
| cv::fastFree(ptr) | 與free類似,釋放一個(gè)cv::fastMalloc()分配的內(nèi)存 |
| cv::getCPUTickCount() | 獲取CPU的tick數(shù) |
| cv::getTickCount() | 獲取系統(tǒng)的tick數(shù) |
| cv::getTickFrequency() | 每秒的tick數(shù) |
| cv::setNumThreads(nthreads) | 設(shè)置使用的線程數(shù) |
| cv::getNumThreads() | 獲取當(dāng)前使用的線程數(shù) |
| cv::getThreadNum() | 獲取當(dāng)前執(zhí)行的線程的索引 |
| cv::setUseOptimized(on_off) | 開啟或關(guān)閉代碼優(yōu)化功能 |
| cv::useOptimized() | 判斷是否開啟代碼優(yōu)化 |
| cv::CV_Assert(expt) cv::CV_DbgAssert(expt) |
判斷expt,若為false則拋出異常 |
| cv::CV_Error(ecode, estring) cv::CV_Error_(ecode, fmt, ...) |
構(gòu)造cv::Exception并拋出一個(gè)異常 |
| cv::error(ex) | 提示錯(cuò)誤并拋出異常 |
5、模板結(jié)構(gòu)
| 通用的固定長度模板 | 描述 |
|---|---|
| cv::Point_<Type T> | 包含兩個(gè)對(duì)象的點(diǎn),對(duì)象類型為T |
| cv::Rect_<Type T> | 位置和寬高的類型均為T |
| cv::Vec<Type T, int H> | 一個(gè)集合,元素的類型為T |
| cv::Matx<Type T, int H, int W> | 一個(gè)H*W的矩陣,元素的類型為T |
| cv::Scalar_<Type T> | 一個(gè)包含四個(gè)對(duì)象的集合(和cv::Vec<T,4>類似),對(duì)象類型為T |