如上圖,先創(chuàng)建一個5x5的無符號三通道矩陣(CvType.CV_8UC3)删铃,設(shè)置每個通道的值為12耳贬,25,110猎唁,Scalar是長度為4的double數(shù)組咒劲,其中第四個恒為0。
我們有時候需要將數(shù)據(jù)存入byte數(shù)組中诫隅,三通道的時候腐魂,需要聲明一個數(shù)組大小為mat.rows()*mat.cols()*3,才能將mat的數(shù)據(jù)裝下逐纬,通過mat.get(0,0,data)蛔屹,將數(shù)據(jù)存入data,通過mat.get可以獲得每個點的值豁生。打印數(shù)據(jù)如下:
data的值是mat每個點的三通道值兔毒,get獲取一個點的多通道值double數(shù)組漫贞,如果不設(shè)置則默認(rèn)為0。
同樣育叁,如果初始化mat為CvType.CV_8UC1迅脐,無符號單通道,則data的數(shù)組大小初始化為mat.rows()*mat.cols()即可豪嗽。同時獲取一個頂點的多通道double數(shù)組大小也為1谴蔑,只有一個通道。
Mark:和c,c++不一樣龟梦,Java版本的openCV實現(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)可以獲取矩陣的某個點刘绣,返回的是double[],存著該點的多通道數(shù)據(jù)樱溉,默認(rèn)為0;
mat.put(1,1,18,20,22);? //前兩個代表mat的rows和cols纬凤,后面是double... 如果是多通道福贞,需要傳入相同的個數(shù),代表的是通道的值停士;
mat.put(0,0,data)可將data全部賦值到mat挖帘,同樣要注意data的大小和mat的通道數(shù)。
以上是個人理解恋技,如有錯誤拇舀,懇請指正!