Android 下 OpenCV的CvType
本地資源圖片轉換成墊
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.hhh);
Mat mat = new Mat(bitmap.getWidth(),bitmap.getHeight(),CvType.CV_8UC4);
Utils.bitmapToMat(bitmap,mat);
這裡需要特別強調的是CvType.CV_8UC4這個引數;
建立墊矩陣/影象容器類的很多構造方法或者其他成員方法在建立墊物件的時候,都
需要指定型別 - 所建立影象/矩陣的型別,關於墊的CvType型別,很多時候容易出現錯誤;
從原始碼看這些型別:
(_type是CV_8UC1,CV_64FC3,CV_32SC(12)等)
同樣,我們通過轉到定義法,看一下CV_8UC1,CV_64FC3等這些巨集到底是什麼;
這裡的型別可以是任何的預定義型別,預定義型別的結構如下所示:
CV_ <bit_depth>(S | U | F)C <number_of_channels>
一。bit_depth:位元數,代表8bite,16bites,32bites,64bites ---舉個例子說,如:
如果你現在建立了一個儲存 - 灰度圖片的墊物件,這個影象的大小為寬100,高100,那麼,現在這張
灰度圖片中有10000個畫素點,它每一個畫素點在記憶體空間所佔的空間大小是8bite,8位所以它對
應的就是CV_8
二.S | U | F:
S--代表--- signed int ---有符號整形
U--代表--unsigned int--無符號整形
F--代表--float -----單精度浮點型
三.C <number_of_channels>
這個代表---一張圖片的通道數,比如:
1--灰度圖片--grayImg ---是 - 單通道影象
2 - RGB彩色影象---------是--3通道影象
3--帶ALPH通道的RGB影象 - 是--4通道影象
我們解讀一下的OpenCV的原始碼:
【1】CV_8UC1 ---則可以建立---- 8位無符號的單通道---灰度圖片------ GrayImg
#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
【2】CV_8UC3 ---則可以建立---- 8位無符號的三通道--- RGB彩色影象--- ColorImg
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
【3】CV_8UC4--則可以建立----- 8位無符號的四通道---帶透明色的RGB影象
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
CvType各Bite下可用引數說明
8U說明:無符號的8點陣圖
值:CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4
通道取值範圍:0〜255
8S說明:有符號的8個圖
值:CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4
通道取值範圍:-128〜127
16U說明:無符號的16個圖
值:CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4
通道取值範圍:0〜65535
16S說明:有符號的16個圖
值:CV_16SC1,CV_16SC2,CV_16SC3,CV_16SC4
通道取值範圍:-32768〜32767
32S說明:無符號的32個圖
值:CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4
通道取值範圍:2147483648 2147483647〜
32F說明:浮點型32個圖
值:CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4
通道取值範圍:1.18 *(10 -38次方])〜3.40 *(10 [38次方])
64F說明:浮點型64個圖
值:CV_64FC1,CV_64FC2,CV_64FC3,CV_64FC4
通道取值範圍:2.23 *(10 -308次方])〜1.79 *(10 [308次方])
1U說明:1位
值:IPL_DEPTH_1U
通道取值範圍:0〜1
參考:https://my.oschina.net/u/3767256/blog/1794173
https://blog.csdn.net/maweifei/article/details/51221259