日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV的数据类型——辅助对象

發布時間:2024/7/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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<>是現成安全的。

Ptr類的附加函數函數描述
addref增加指針內部的引用次數
release減少指針內部的引用次數
empty

① 確定一個智能指針是否指向一個已經被釋放掉的對象(一個對象調用一次或多次release()的時候);

② 確定智能指針對象內部對象指針是否處于其他原因而為NULL(賦值時使用了一個剛好首先返回NULL的函數)

delete_obj引用計數為0時自動調用的函數,默認情況下,定義了但不做任何事,實際可根據自己的需求重載該函數。

cv::Exception類和異常處理

OpenCV使用異常來處理錯誤,定義了自己的異常類型cv::Exception,它繼承自STL的異常類std::exception。

有幾個內置宏用于自己生成異常,但是在較新的OpenCV版本中,這些功能只能在調試(debug)版本中使用。

Exception內置宏宏描述
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的数据类型——辅助对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。