OpenCV Mat結構關鍵特性記錄

2021-08-11 14:56:40 字數 929 閱讀 2782

mat結構(類)是opencv中進行影象處理的基本元素,代表一幅影象。可以建立乙個空的mat物件(cv::mat img),可以建立指定影象大小和資料格式的mat物件(cv::mat img(128, 128, cv::cv_8uc3, cv::scalar(255,255,0)) - 經過初始化的彩色影象, cv::mat img(cv::size(128,128), cv::cv_8u) - 未初始化的灰度影象),可以從檔案讀取然後賦值給乙個mat物件(cv::mat img = cv::imread("img.jpg", 1)),還可以從攝像頭等裝置讀取資料然後儲存到mat物件。同時,也可以將乙個cv::mat物件賦值給另乙個cv::mat物件。

cv::mat物件的賦值操作需要注意,首先,cv::mat結構包括兩個部分:特性區和資料區,特性區存放的是影象或者資料矩陣的行/列值,資料型別(無符號值,整數,浮點數等)等資訊,資料區存放的是影象中畫素值。在賦值中,opencv雖然新建了乙個cv::mat物件,但是兩個物件共用乙個資料區,只是特性區屬於各自物件,當其中乙個物件的生命期結束要釋放空間時,如果資料區仍然被其他cv::mat物件引用,那麼就不會釋放,直到最後引用此資料區的cv::mat物件被釋放。

根據cv::mat資料區的這一特性,在選擇roi(region of interest)的時候,建立的小影象從大影象中選擇一塊區域,實際小影象的mat物件只是新建了特性區,資料區仍然指向大影象的資料區的興趣部分。

同時,在函式傳參時,雖然傳入的是cv::mat物件,但是,並非將整個cv::mat物件進行拷貝,只是拷貝了特性區,形參和傳參共用同一塊資料區。因此在函式內部修改資料區,那麼傳入的cvmat物件也會被修改,而不必用傳入引用或者傳入指標代替。

還有乙個特點,使用cv::mat::create()成員函式時,雖然使為cv::mat物件特性變化,如果原物件的資料區能夠容下新物件的資料區,那麼opencv就不會釋放舊的資料區再新建,而是直接採用原資料區。

InnoDB關鍵特性

innodb使用insert buffer 欺騙 資料庫 對於為非唯一索引,輔助索引的修改操作並非實時更新索引的葉子頁,而是把若干對同一頁面的更新快取起來做合併為一次性更新操作,轉化隨機io 為順序io,這樣可以避免隨機io帶來效能損耗,提高資料庫的寫效能。ibuf pool size per ma...

innodb 關鍵特性

插入緩衝 innodb儲存引擎對於非聚集索引的插入或更新操作,不是每一次直接插入到索引頁中,而是先判斷插入的非聚集索引頁是否在緩衝池,若在,則直接插入 不在,則先放在乙個insert buffer物件中。資料庫這個非聚集的索引已經插到葉子節點,而實際並沒有,知識存放在另乙個位置。然後再以一定的頻率和...

RocketMQ 關鍵特性

apache rocketmq之所以能在眾多的訊息中介軟體中脫穎而出,能吸引數千企業使用者與rocketmq的關鍵特性是分不開的,本文詳細介紹rocketmq中的關鍵特性。諸如kafka之類的訊息中介軟體,在佇列數上公升時效能會產生巨大的損失,rocketmq之所以能單機支援上萬的持久化佇列與其獨特...