C++OpenCV4.5常⽤API 查询⼿册(⼆)
系列⽂章⽬录
⽂章⽬录
前⾔
记录⼀些常⽤OpenCV常⽤API的使⽤介绍,长期更新,当做操作⼿册使⽤
⼀、Mat 对象
1、简介
Mat对象是OpenCV2.0之后引进的图像数据结构;⾃动分配内存、不存在内存泄漏的问题,是⾯向对象的数据结构;分了两个部分,头部和数据部分;
2、构造函数和常⽤⽅法
常⽤构造函数
常⽤⽅法
相关构造函数和常⽤⽅法的⽰例代码如下: Mat (); Mat (int rows , int cols , int type ); Mat (Size size , int type ); Mat (int rows , int cols , int type , const Scalar & s ); Mat (Size size , int type , const Scalar & s ); Mat (int ndims , const int * sizes , int type ); Mat (int ndims , const int * sizes , int type , const Scalar & s );
1
2
3
4
5
6
7 void copyTo (Mat mat ); void convertTo (Mat dst , int type ); Mat clone (); int channels (); int depth (); bool empty (); uchar * ptr (int i0=0);
1
2
3
4
5
6
7#include <opencv2/opencv.hpp>#include <iostream>using namespace std ;using namespace cv ;int main (void ){
1
2
3
4
5
6
7
8
{ Mat srcImg , dstImg ; srcImg = imread ("D:\\1.jpg"); if (!srcImg .data ) { cout << "can not load image.." << endl ; return -1; } namedWindow ("测试"); imshow ("测试", srcImg ); /************************⽰例⼀*************************/ /* // 创建了⼀个和源图像⼤⼩、图像类型⼀样的Mat 对象,但是没有值 //dstImg = Mat(srcImg.size(), pe()); ate(srcImg.size(), pe()); // 给Mat 对象设置⼀个颜⾊值 dstImg = Scalar(125, 125, 125); */ /************************⽰例⼆*************************/ /* // 创建⼀个3通道的100*100像素的Mat 对象,每个像素点的BGR 是(0, 0, 255) // 参数⼀:⾏数 // 参数⼆:列数 // 参数三:CV_8UC3中8表⽰每个通道占8位、U 表⽰⽆符号、C 表⽰char 类型、3表⽰通道数⽬是3 // 参数四:向量,表⽰初始化每个像素值是多少,向量长度对应通道数⽬ //Mat mat(100, 100, CV_8UC1, Scalar(255)); Mat mat(100, 100, CV_8UC3, Scalar(0, 0, 255)); namedWindow("测试输出"); imshow("测试输出", mat); */ /************************⽰例三*************************/ /* // 克隆⼀个Mat 对象,数据完全拷贝 dstImg = srcImg.clone(); */ /************************⽰例四*************************/ /* // 拷贝⼀个Mat 对象 pyTo(dstImg); */ /
************************⽰例五*************************/ // 将图像转换为灰⾊图像 cvtColor (srcImg , dstImg , COLOR_BGR2GRAY ); /************************⽰例六*************************/ // 获取图像通道数 cout << "srcImg channels :" << srcImg .channels () << endl ; cout << "dstImg channels :" << dstImg .channels () << endl ; /************************⽰例七*************************/ // 获取图像第⼀⾏的像素值 const uchar * pFirstRow = dstImg .ptr <uchar >(0); cout << "dstImg first pixel value :" << *pFirstRow << endl ; /************************⽰例⼋*************************/ // 获取图像的⾏数和列数 cout << "dstImg rows :" << srcImg .rows << endl ; cout << "dstImg clos :" << srcImg .cols << endl ; /************************⽰例九*************************/ // 创建⼀个3*3的Mat 数组 Mat kernel = (Mat_<uchar >(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); cout << endl << kernel << endl ; /************************⽰例⼗*************************/
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Mat 对象使⽤
部分复制:⼀般情况只会复制Mat对象的头部,不会复制数据部分
完全复制:如果想要复制完整的头部和数据部分,使⽤如下API
Mat 使⽤总结: 1、输出图像的内存是⾃动分配的 2、使⽤OpenCV的C++接⼝,不需要考虑内存分配问题 3、赋值操作和拷贝构造函数只会复制头部 4、使⽤clone与copyTo两个函数可实现数据完全复制
⼆、imread
三、namedWindow
/************************⽰例⼗*************************/ // 初始化⼀个和源图像⼤⼩、类型⼀致的纯⿊⾊对象 Mat mat = Mat ::zeros (srcImg .size (), srcImg .type ()); /************************⽰例⼗⼀*************************/ // 初始化⼀个单通道的2*2的纯⿊⾊对象 //Mat mat2 = Mat::zeros(2, 2, CV_8UC1); // 初始化⼀个单通道的2*2的眼睛对象 Mat mat2 = Mat ::eye (2, 2, CV_8UC1); cout << endl << mat2 << endl ; namedWindow ("测试输出"); imshow ("测试输出", dstImg ); waitKey (0); return 0;}73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
rectangle函数opencv90
91
92
93 Mat A = imread ("D:\\1.jpg"); Mat B (A ); // 只复制头部
1
2// ⽅法⼀Mat C = A .clone ();// ⽅法⼆Mat D ;A .copyTo (A );
1
2
3
4
5// 功能:加载图像⽂件成为⼀个Mat 对象// 参数:filename 图像路径// flags 加载图像的标识,常见有// IMREAD_UNCHANGED(-1):表⽰加载原图,不做任何改变// IMREAD_GRAYSCALE(0):把原图作为灰度图像加载进来// IMREAD_COLOR(1):将原图作为RGB 图像加载进来---默认值// 返回:
成功返回⼀个Mat 图像数据对象Mat imread ( const String & filename , int flags = IMREAD_COLOR );
1
2
3
4
5
6
7
8// 功能:创建⼀个OpenCV 窗⼝,由OpenCV ⾃动创建和释放,⽆需⼿动销毁// 参数:winname 窗⼝名称// flags 窗⼝标识,主要⽤到// WINDOW_AUTOSIZE :⾃动根据图像⼤⼩,显⽰窗⼝⼤⼩,不能⼈为改变窗⼝⼤⼩---默认值// WINDOW_NORMAL :跟QT 集成时⽤到,允许修改窗⼝⼤⼩// 返回:⽆void namedWindow (const String & winname , int flags = WINDOW_AUTOSIZE );
1
2
3
4
5
6
7
四、
五、cvtColor
六、imwrite
七、waitKey
七、bitwise_not
⼋、filter2D // 功能:根据窗⼝名称显⽰图像到指定窗⼝// 参数:winname 窗⼝名称// mat Mat 图像数据对象// 返回:⽆void imshow (const String & winname , InputArray mat );
1
2
3
4
5// 功能:把图像从⼀个彩⾊空间转换到另⼀个⾊彩空间// 参数:src 源图像, Mat 对象类型// dst ⾊彩空间转换后的图像,Mat 对象类型// code 源和⽬标⾊彩空间,如:COLOR_BGR2HLS(饱和度)、COLOR_BGR2GRAY(灰度)等// dstCn ...-默认为0// 返回:⽆void cvtColor ( InputArray src , OutputArray dst , int code , int dstCn = 0 );
1
2
3
4
5
6
7// 功能:保存图像⽂件到指定路径,只有8位和16位的PNG 、JPG 和Tiff ⽂件格式,并且是单通道或三通道的BGR 的图像才可通过改⽅式保存;保存PNG 格式的时
// 参数:filename 保存的图像的路径// img 要保存的图像,Mat 对象类型// params 格式化指定参数编码---默认为空// 返回:⽆bool imwrite ( const String & filename , InputArray img , const std ::vector <int >& params = std ::vector <int >());1
2
3
4
5
6
7// 功能:⽆限期地等待按键事件或延迟// 参数:delay 延迟(单位:ms ),0表⽰⽆限期地等待按键事件// 返回:如果在延时之前按下键,返回对应的键的值,否则返回-1int waitKey (int delay = 0);
1
2
3
4// 功能:翻转图像颜⾊,⽬标图像的像素值 = 255 - 源图像的像素值 // 参数:src 源图像,Mat 对象类型// dst ⽬标图像,Mat 对象类型// mask ...// 返回:⽆void bitwise_not (InputArray src , OutputArray dst , InputArray mask = noArray ());
1
2
3
4
5
6
7
九、addWeighted
⼗、line
⼗⼀、rectangle
⼗⼆、circle // 功能:图像卷积运算函数// 参数:src 源图像,Mat 对象类型// dst ⽬标图像,Mat 对象类型// ddepth 位图深度,有32、24、8等// kernel 掩膜,Mat 类型对象// ...其他都是默认值// 返回:⽆void filter2D ( InputArray src , OutputArray dst , int ddepth , InputArray kernel , Point anchor = Point (-1,-1), double delta = 0, int borderType = BORDER_DEFAULT );
1
2
3
4
5
6
7
8
9
10// 功能:图像混合,两张图像的⼤⼩和类型必须⼀致// 参数:src1 输⼊图像1,Mat 对象类型// alpha 输⼊图像1的混合权重// src2 输⼊图像2,Mat 对象类型// beta 输⼊图像2的混合权重// gamma 图像1与图像2的像素值、通过上⾯的公式相加后,会加上该数值// dst 输出混合图像,Mat 对象类型//
dtype ...默认-1// 返回:⽆void addWeighted (InputArray src1, double alpha , InputArray src2, double beta , double gamma , OutputArray dst , int dtype = -1);1
23
4
5
6
7
8
9
10
11// 功能:绘制⼀条连接两个点的线段// 参数:img 图像源,Mat 对象类型// pt1 线段的点1// pt2 线段的点2// color 线条颜⾊// thickness 线条厚度// lineType 线型类型(LINE_4\LINE_8\LINE_AA)// shift
移动点坐标中⼩数位数void line (InputOutputArray img , Point pt1, Point pt2, const Scalar & color , int thickness = 1, int lineType = LINE_8, int shift = 0);1
2
3
4
5
6
7
8
9
10// 功能:绘制⼀个矩形// 参数:img 图像源,Mat 对象类型// rec 矩形// color 矩形颜⾊或亮度(灰度图像)// thickness 线条厚度// lineType 线型类型(LINE_4\LINE_8\LINE_AA)// shift 移动点坐标中
⼩数位数void rectangle (Mat & img , Rect rec , const Scalar & color , int thickness = 1, int lineType = LINE_8, int shift = 0);
1
2
3
4
5
6
7
8
9
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论