
如上圖,先創(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)指正!