Android opencv mat 相關(guān)操作

如上圖,先創(chuàng)建一個(gè)5x5的無符號(hào)三通道矩陣(CvType.CV_8UC3),設(shè)置每個(gè)通道的值為12,25,110,Scalar是長度為4的double數(shù)組,其中第四個(gè)恒為0。

我們有時(shí)候需要將數(shù)據(jù)存入byte數(shù)組中,三通道的時(shí)候,需要聲明一個(gè)數(shù)組大小為mat.rows()*mat.cols()*3,才能將mat的數(shù)據(jù)裝下,通過mat.get(0,0,data),將數(shù)據(jù)存入data,通過mat.get可以獲得每個(gè)點(diǎn)的值。打印數(shù)據(jù)如下:


data的值是mat每個(gè)點(diǎn)的三通道值,get獲取一個(gè)點(diǎn)的多通道值double數(shù)組,如果不設(shè)置則默認(rèn)為0。

同樣,如果初始化mat為CvType.CV_8UC1,無符號(hào)單通道,則data的數(shù)組大小初始化為mat.rows()*mat.cols()即可。同時(shí)獲取一個(gè)頂點(diǎn)的多通道double數(shù)組大小也為1,只有一個(gè)通道。

Mark:和c,c++不一樣,Java版本的openCV實(shí)現(xiàn)mat和byte的轉(zhuǎn)換主要通過get 和 put:

mat.get(0,0,data),可將mat的所有數(shù)據(jù)存入data,注意的是mat的通道,如果是多通道比如,3,4,則data的大小初始化為mat的rows()*cols()*N N為通道數(shù);

mat.get(x,y)可以獲取矩陣的某個(gè)點(diǎn),返回的是double[],存著該點(diǎn)的多通道數(shù)據(jù),默認(rèn)為0;

mat.put(1,1,18,20,22);? //前兩個(gè)代表mat的rows和cols,后面是double... 如果是多通道,需要傳入相同的個(gè)數(shù),代表的是通道的值;

mat.put(0,0,data)可將data全部賦值到mat,同樣要注意data的大小和mat的通道數(shù)。

以上是個(gè)人理解,如有錯(cuò)誤,懇請(qǐng)指正!

最后編輯于
?著作權(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)容