opencv 常用对象
创建Mat对象的方法
- 构造函数Mat()
Mat M(2,2,CV_8UC3,Scalar(0,0,255));
cout << "M = " << M << endl;
// output
// M = [ 0, 0, 255, 0, 0, 255;
// 0, 0, 255, 0, 0, 255]
这段代码创建了2*2的标量(Scalar)(只有大小没有方向)[0,255,255]
CV_8UC3 表示 unsigned char 类型
char 是一个字节 -128-127
unsigned 是 0-255
- 通过构造函数
int sz[3] = {2,2,2};
Mat L(3,sz,CV_8UC,Scalar::all(0));
cout << M << endl;
// error 输出会报错
Scalar::all(0) 会返回一个[0,0,0,0]
构造函数有点多用到一个再写一个吧。
格式化输出
直接用python格式的,因为很舒服
Mat r(10,4,CV_8UC3);
randu(r,Scalar::all(0),Scalar::all(255));
cout<< format(r,Formatter::FMT_PYTHON) << endl;
//output
[[[ 91, 2, 79], [179, 52, 205], [236, 8, 181]],
[[239, 26, 248], [207, 218, 45], [183, 158, 101]],
[[102, 18, 118], [ 68, 210, 139], [198, 207, 211]],
[[181, 162, 197], [191, 196, 40], [ 7, 243, 230]],
[[ 45, 6, 48], [173, 242, 125], [175, 90, 63]],
[[ 90, 22, 112], [221, 167, 224], [113, 208, 123]],
[[214, 35, 229], [ 6, 143, 138], [ 98, 81, 118]],
[[187, 167, 140], [218, 178, 23], [ 43, 133, 154]],
[[150, 76, 101], [ 8, 38, 238], [ 84, 47, 7]],
[[117, 246, 163], [237, 69, 129], [ 60, 101, 41]]]
#常用数据结构
- 点 Point
// 二维
Point2f p(6,2);
// 三维
Point3f p3(6,2,5);
// output
[6,2]
[6,2,5]
- 向量 vector
和数组差不多
vector<float> v;
v.push_back(3);
v.push_back(5);
v.push_back(7);
cout << Mat(v) << endl;
//output
[3;
5;
7]
这个vector 是标准库的向量,可以自动改变自己的长度
- 颜色 Scalar
Scalar 是一个四个元素的数组
Scalar s(0,0,0,0);
//可以是
int r = 255,g=0,b=0;
Scalar(r,g,b);
- 大小 Size
width 和 height
int width = 100, height = 200;
Size(width, height);
- 矩形 Rect
int x = 0, y = 0,width = 200, height = 200;
Rect rect1(x, y, width, height);
Rect rect2(x + 50, y + 50, width, height);
// 矩形交集
Rect rect = rect1 & rect2;
// output
[150 x 150 from (50, 50)]
// 矩形并集
Rect rect = rect1 | rect2;
[250 x 250 from (0, 0)]
// 移动矩形
Point2f point(10, 10);
Rect rectShift = rect + point;
// 添加
Rect rectShift = rect1 - Size(20,20);
//output
[180 x 180 from(0, 0)]
// 移动
Rect rectShift = rect1 - Point(20,20);
// output
[200 x 200 from(-20, -20)]
- 颜色空间转换 cvtColor
void cvtColor(InputArray src, OutputArray output ,int code, int dstCn=0);
常用颜色
- RGB
- HSV 色调 饱和度 明度
- HLS 色调 亮度 饱和度
- Gray 灰度
- 5X5 5X5颜色矩阵,开发板
- YCrCb(YUV) Y 明亮度 U和V色度,描述色彩及饱和度 JPEG会用
- CIE Lab L 亮度 a 和 b 色彩对立唯独
- CIE Luv 未知
- Bayer 拜尔滤色镜 多用于数字图像传感器
- YUV420 YUV的一种
常量都在COLOR_XXX2XXX 定义
ps: OpenCV 默认图片通道存储孙旭是BGR即蓝绿红,而不是RGB