本地资源图片转换成垫
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