1. 程式人生 > >Android 下 OpenCV的CvType

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