OpenCV学习:Mat结构中的数据共享机制
使用Mat類,內(nèi)存管理變得簡(jiǎn)單,不再像使用IplImage那樣需要自己申請(qǐng)和釋放內(nèi)存。
Mat是一個(gè)類,由兩個(gè)數(shù)據(jù)部分組成:矩陣頭(包含矩陣尺寸,存儲(chǔ)方法,存儲(chǔ)地址等信息)和一個(gè)指向存儲(chǔ)所有像素值的矩陣的指針。 矩陣頭的尺寸是常數(shù)值,但矩陣本身的尺寸會(huì)依圖像的不同而不同,通常比矩陣頭的尺寸大數(shù)個(gè)數(shù)量級(jí)。 復(fù)制矩陣數(shù)據(jù)往往花費(fèi)較多時(shí)間,因此除非有必要,不要復(fù)制大的矩陣。
為了解決矩陣數(shù)據(jù)的傳遞,OpenCV使用了引用計(jì)數(shù)機(jī)制。其思路是讓每個(gè)Mat對(duì)象有自己的矩陣頭信息,但多個(gè)Mat對(duì)象可以共享同一個(gè)矩陣數(shù)據(jù),讓矩陣指針指向同一地址而實(shí)現(xiàn)這一目的。 很多函數(shù)以及很多操作(如函數(shù)參數(shù)傳值)只復(fù)制矩陣頭信息,而不復(fù)制矩陣數(shù)據(jù)。
對(duì)于圖像img,程序中提供3種關(guān)聯(lián)方式:
第一種是賦值運(yùn)算符:“=”,result1并沒(méi)有復(fù)制新的數(shù)據(jù),而只是指向img,它們指向內(nèi)存中同一塊數(shù)據(jù),img的引用計(jì)數(shù)只是+1而已。
第二種是clone,result2是img的一份拷貝。
第三種是copyTo,result3也是img的一份拷貝。
類似于C++中的拷貝構(gòu)造,“=”可以看作是“淺拷貝”,而clone和copyTo可以看作是“深拷貝”。
?
運(yùn)行結(jié)果:
轉(zhuǎn)載于:https://www.cnblogs.com/MakeView660/p/6579477.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的OpenCV学习:Mat结构中的数据共享机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 服务器相关
- 下一篇: web前端面试题(含答案)