opencv入门(4)图像创建和赋值
文章目录
- 1. Mat基本结构
- 2 创建图像
- 3 克隆和拷贝
- 4 Kernel
1. Mat基本结构
头部,作为图片的属性,单通道多通道,整形等都存储在头部,
如果只是赋值,不会创建新的Data Block,只有克隆(clone)和拷贝(copyTo)时,才会创建新的数据块
2 创建图像
Mat m3 = Mat::zeros(Size(8,8),CV_8UC1);
8UC1 = unsigned char 8位的无符号类型,1 表示单通道数据
打印出来就像这样,依次为 00,01,11…10,11,12…76,77
如果改成Mat m3 = Mat::zeros(Size(8,8),CV_8UC3);
表示每个数据有3个通道数,依旧是8行,但每个数据变成了3个,所以一排有3*8 = 24 个数据
打印出来 cols 是 8,高度是8,通道数是3
只有每个通道的第一个像素点才是1,如果通道是3,则会出现下列打印
可以给通道赋值
Mat m4 = Mat::ones(Size(8, 8), CV_8UC1);m4 = 127;
如果知道是几个通道的,则使用Scalar,给每个通道的值进行赋值
创建Size(512,512)的图像
Mat m5 = Mat::ones(Size(400, 400), CV_8UC1);m5 = 127;m5.Scalar(255, 0, 0);imshow("test", m5);
Scalar 是RGB3 通道,所以能创建各种样式的底色图片
3 克隆和拷贝
直接赋值,因为两个都是同样的data block,所以改变m4,就是改变m3
如果使用拷贝和克隆函数,m3和m4就属于不同的data block
copyTo也是一样
4 Kernel
在后面会说明