没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
OpenCV 的基本矩阵操作与示例
OpenCV 中的矩阵操作非常重要,本文总结了矩阵的创建、初始化以及基本矩阵
操作,给出了示例代码,主要内容包括:
创建与初始化
矩阵加减法
矩阵乘法
矩阵转置
矩阵求逆
矩阵非零元素个数
矩阵均值与标准差
矩阵全局极值及位置
其他矩阵运算函数列表
1.创建与初始化矩阵
1.1数据类型
建立矩阵必须要指定矩阵存储的数据类型,图像处理中常用的几种数据类型如下:
1. CV_8UC1// 8
位无符号单通道
2. CV_8UC3// 8 位无符号 3 通道
3. CV_8UC4
4. CV_32FC1// 32
位浮点型单通道
5. CV_32FC3// 32 位浮点型 3 通道
6. CV_32FC4
包括数据位深度 8 位、32 位,数据类型 U:uchar、F:float 型以及通道数 C1:单通
道、C3:三通道、C4:四通道。
1.2基本方法
我们可以通过载入图像来创建 Mat 类型矩阵,当然也可以直接手动创建矩阵,基
本方法是指定矩阵尺寸和数据类型:
1. // 基本方法
2. cv::Mat a(cv::Size(5,5),CV_8UC1); // 单通道
3. cv::Mat b = cv::Mat(cv::Size(5,5),CV_8UC3); //3 通道每个矩阵元素包
含 3 个 uchar 值
4. cout<<"a = "<<endl<<a<<endl<<endl;
5. cout<<"b = "<<endl<<b<<endl<<endl;
6. system("pause");
运行结果:
3 通道矩阵中,一个矩阵元素包含 3 个变量。
1.3初始化方法
上述方法不初始化矩阵数据,因此将出现随机值。如果想避免这种情况,可使用
Mat 类的几种初始化创建矩阵的方法:
1. // 初始化方法
2. cv::Mat mz = cv::Mat::zeros(cv::Size(5,5),CV_8UC1); // 全零矩阵
3. cv::Mat mo = cv::Mat::ones(cv::Size(5,5),CV_8UC1); // 全 1 矩阵
4. cv::Mat me = cv::Mat::eye(cv::Size(5,5),CV_32FC1); // 对角线为
1 的对角矩阵
5. cout<<"mz = "<<endl<<mz<<endl<<endl;
6. cout<<"mo = "<<endl<<mo<<endl<<endl;
7. cout<<"me = "<<endl<<me<<endl<<endl;
运行结果:
2.矩阵运算
2.1基本概念
OpenCV 的 Mat 类允许所有的矩阵运算。
2.2矩阵加减法
我们可以使用"+"和"-"符号进行矩阵加减运算。
1. cv::Mat a= Mat::eye(Size(3,2), CV_32F);
2. cv::Mat b= Mat::ones(Size(3,2), CV_32F);
3. cv::Mat c= a+b;
4. cv::Mat d= a-b;
2.3矩阵乘法
使用"*"号计算矩阵与标量相乘,矩阵与矩阵相乘(必须满足矩阵相乘的行列数对
应规则)
1. Mat m1= Mat::eye(2,3, CV_32F); //使用 cv 命名空间可省略 cv::前缀,下
同
2. Mat m2= Mat::ones(3,2, CV_32F);
3. cout<<"m1 = "<<endl<<m1<<endl<<endl;
4. cout<<"m2 = "<<endl<<m2<<endl<<endl;
5. // Scalar by matrix
6. cout << "\nm1.*2 = \n" << m1*2 << endl;
7. // matrix per element multiplication
8. cout << "\n(m1+2).*(m1+3) = \n" << (m1+1).mul(m1+3) << endl;
9. // Matrix multiplication
10. cout << "\nm1*m2 = \n" << m1*m2 << endl;
剩余10页未读,继续阅读
资源评论
rock_wl2010
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功