OpenCV的数据类型——辅助对象
在上一篇文章中,主要介紹了OpenCV的基礎數據類型。接下來在本篇文章中將主要對OpenCV的輔助對象進行介紹。
cv::TermCriteria類
在很多算法中都存在著循環嵌套,只有滿足終止條件時才會退出。通常情況下,終止條件的形式要么是達到允許的有限迭代次數(COUNT或MAX_ITER),要么是某種形式的誤差參數(如果接近如此程度,就退出循環,稱為EPS,即epsilon的簡稱)。cv::TermCriteria類有三個成員變量(type, maxCount, epsilon),都可以直接設置,因為它們是公有的。通常只通過其構造函數TermCriteria( int type, int maxCount, int epsilon )進行設置。其中,type的值可為cv::TermCriteria::COUNT、cv::TermCriteria::MAX_ITER或cv::TermCriteria::EPS,也可把兩個條件并在一起(使用位運算符|)。
cv::Range類
cv::Range類用于確定一個連續的整數序列,含有兩個成員變量start和end,范圍包含start,但不包含end。成員函數有size()(得到Range類中的元素數)和empty()(判斷Range類中是否含有元素)。cv::Range::all()用于任何需要獲得對象可用范圍的時候。
cv::Ptr模板和垃圾收集
智能指針(smart pointer)允許我們創建一個對象的引用,然后把它傳遞到各處并創建更多對該對象的引用,而這些引用都會被計數。當引用超出范圍,智能指針的引用計數就會減少,當所有的引用消失時,該對象將自動清理(釋放)。
可以通過以下兩種方式定義一個指針模板的示例:
①?cv::Ptr<cv::Matx33f> p( new cv::Matx33f );
②?cv::Ptr<cv::Matx33f> p = makePtr<cv::Matx33f>();
一旦得到p,就可以創建其他相同類型的對象,而不需要把一個指向新的對象的指針傳遞給它們。例如:可以創建一個cv::Ptr<cv::Matx33f> q, 當p的值傳遞給q時,p和q同時指向一個實例。它們都知道自己是兩個指針中的一個,當p被釋放時,q就能知道它是原始矩陣僅存的引用的引用。如果這個時候q也要被釋放,它的析構函數將被隱式調用,由于q發現它是遺留下來的最后一個引用,它會釋放它的原始矩陣。cv::Ptr<>是現成安全的。
| addref | 增加指針內部的引用次數 |
| release | 減少指針內部的引用次數 |
| empty | ① 確定一個智能指針是否指向一個已經被釋放掉的對象(一個對象調用一次或多次release()的時候); ② 確定智能指針對象內部對象指針是否處于其他原因而為NULL(賦值時使用了一個剛好首先返回NULL的函數) |
| delete_obj | 引用計數為0時自動調用的函數,默認情況下,定義了但不做任何事,實際可根據自己的需求重載該函數。 |
cv::Exception類和異常處理
OpenCV使用異常來處理錯誤,定義了自己的異常類型cv::Exception,它繼承自STL的異常類std::exception。
有幾個內置宏用于自己生成異常,但是在較新的OpenCV版本中,這些功能只能在調試(debug)版本中使用。
| CV_Error(errorcode, description) | 生成并拋出一個有固定文字描述的異常 |
| CV_Error_(errorcode, printf_fmt_str, [printf-args]) | 以同樣的方式工作,但允許使用類似printf格式字符串和參數代替固定的描述 |
| CV_Assert(condition) | 會在測試程序中所設定的條件(condition),如果不符合條件,則拋出異常。 |
| CV_DbgAssert(condition) |
cv::InputArray類和cv::OutputArray類
cv::InputArray類和cv::OutputArray類之間主要的區別在于前者是常量(只讀),后者是可變量。除此之外還有cv::InputOutputArray(就地計算的數據)和cv::noArray()(表示輸入的是并沒有被使用的輸入量或無輸出)。
?
本文主要介紹了OpenCV中的上述輔助對象,還有其他輔助對象,比如cv::DataType<>模板,但未做深入研究,所以在此不進行介紹。
總結
以上是生活随笔為你收集整理的OpenCV的数据类型——辅助对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贝叶斯用于文档分类
- 下一篇: 的图片怎么循环渲染_十分钟教你做个炫酷的