學(xué)習(xí)OpenCV3:第3章 了解OpenCV的數(shù)據(jù)類型


1、OpenCV的數(shù)據(jù)類型

  1. 根據(jù)組織結(jié)構(gòu),OpenCV的數(shù)據(jù)類型主頁分成三類:直接從C=++原語中繼承的基本數(shù)據(jù)類型,如int、float、數(shù)組、矩陣等;輔助對(duì)象,如垃圾收集指針類、用于數(shù)據(jù)切片的范圍對(duì)象、抽象的終止條件等;大型數(shù)組類型,如cv::Mat、cv::SparseMat。
  2. 基本數(shù)據(jù)類型:cv::Point、cv::Size、cv::Rect、cv::RotateRect、固定矩形類cv::Matx、固定向量類cv::Vec、cv::Scalar。
  3. 訪問成員:cv::Point、cv::Size、cv::Rect、cv::RotateRect通過變量名訪問,如p.x、p.y等;固定向量類cv::Vec、cv::Scalar、固定矩形類cv::Matx通過下標(biāo)訪問,如myvec[0]、myscalar[2]。
  4. 類型別名中的原語: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 p
cv::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 sz
cv::Size2i sz
cv::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 & r2
r1 &= r2
同時(shí)包含矩形r1和矩形r2的最小面積矩形 cv::Rect r3 = r1 | r2
r1 |= r2
矩形r平移x cv::Rect r2 = r1 + x
r1 += x
矩形r擴(kuò)大s cv::Rect r2 = r1 + s
r1 += 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 z1
cv::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 m33f
cv::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 v2s
cv::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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容