当前位置: 首页 > article >正文

【opencv入门教程】14. 矩阵乘除运算

文章选自:
请添加图片描述

一、函数multiply、divide


//乘法
CV_EXPORTS_W void multiply(InputArray src1, InputArray src2,
                           OutputArray dst, double scale = 1, int dtype = -1);
@brief 计算两个数组的每个元素的按比例缩放乘积 
@note 当输出数组的深度为 CV_32S 时,不会应用饱和操作。在溢出的情况下,甚至可能得到带有错误符号的结果。
@param src1 第一个输入数组。
@param src2 第二个与 src1 大小和类型相同的输入数组。
@param dst 与 src1 相同大小和类型的输出数组。
@param scale 可选的缩放因子。
@param dtype 输出数组的可选深度。
                         
//除法
CV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst,
                         double scale = 1, int dtype = -1);


CV_EXPORTS_W void divide(double scale, InputArray src2,
                         OutputArray dst, int dtype = -1
@brief 对两个数组或标量与数组进行每元素除法运算。
@note 当输出数组的深度为 CV_32S 时,不会应用饱和操作。在溢出的情况下,甚至可能得到带有错误符号的结果。
@param src1 第一个输入数组。
@param src2 第二个与 src1 大小和类型相同的输入数组。
@param scale 标量因子。
@param dst 与 src2 相同大小和类型的输出数组。
@param dtype 输出数组的可选深度;如果为 -1,则 dst 的深度将为 src2.depth(),但在数组与数组除法时,只能在 src1.depth()==src2.depth() 时传入 -1。
@sa  multiply, add, subtract

二、测试程序


void Samples::MatrixMultiandDiv()
{
  //step1. 矩阵之间乘法
  cout << "step1. 矩阵乘法" << endl;
  cv::Mat A1 = (cv::Mat_<float>(2, 3) << 1, 200, 3, 4, 5, 6);
  cout << "A1中的数据为:\n" << A1 << endl << endl;

  cv::Mat B1(A1.size(), A1.type(), cv::Scalar(1));
  cout << "B1中的数据为:\n" << B1 << endl << endl;

  double scale1 = 1.4;

  cv::Mat C1;
  cv::multiply(A1, B1, C1, scale1);
  cout << "C1中的数据为:\n" << C1 << endl << endl;

  cv::Mat D1;
  cv::multiply(A1, B1, D1, scale1, CV_8U);
  cout << "D1中的数据为:\n" << D1 << endl << endl;

  //step2. 矩阵与标量相乘
  cout << "step2. 矩阵与标量相乘" << endl;
  cv::Mat A2 = (cv::Mat_<float>(2, 3) << 1, 2, 3, 4, 5, 6);
  cout << "A2中的数据为:\n" << A2 << endl << endl;

  double scale2 = 1.4;
  cv::Mat B2 = scale2 * A2;

  cout << "B2中的数据为:\n" << B2 << endl << endl;

  //step3. 矩阵间相除
  cout << "step3. 矩阵间相除" << endl;
  cv::Mat A3 = (cv::Mat_<float>(2, 3) << 1, 2, 3, 4, 5, 6);
  cout << "A3中的数据为:\n" << A3 << endl << endl;

  cv::Mat B3 = (cv::Mat_<float>(2, 3) << 2, 3, 4, 5, 6, 7);
  cout << "B3中的数据为:\n" << B3 << endl << endl;

  cv::Mat C3;
  double scale3 = 2;
  cv::divide(B3, A3, C3, scale3);
  cout << "C3中的数据为:\n" << C3 << endl << endl;

  cv::Mat C31 = B3.mul(scale3 / A3);
  cout << "C31中的数据为:\n" << C31 << endl << endl;

}

三、测试结果

在这里插入图片描述


http://www.kler.cn/a/429663.html

相关文章:

  • MySQL数据库(SQL分类)
  • SpringBoot整合Easy-es
  • TiDB常见操作指南:从入门到进阶
  • 服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例
  • 【Rust】错误处理机制
  • 【React】新建React项目
  • 企业防盗版:SPN安全上网解决方案,您的智能防护盾
  • 基于Hadoop大数据音乐推荐系统的设计与实现
  • 数据结构之初始二叉树(1)
  • Vue中key值的作用?
  • 获取缓存大小与清除 Web 缓存 - 鸿蒙 HarmonyOS Next
  • 《深入浅出HTTPS》读书笔记(17):公开密钥算法
  • 【C++算法】34.位运算_丢失的数字
  • 三维测量与建模笔记 - 6.1 双目立体视觉系统
  • 监控组态软件的构成与功能
  • Windows11设置windows暂停更新100年
  • 大文件分块上传后端服务器
  • C++实现一个经典计算器(逆波兰算法)附源码
  • Vue的生命周期方法有哪些?一般在哪一步发送请求
  • JavaWeb:HTMLCSS
  • 手机租赁平台开发的机会与挑战分析
  • win11 恢复任务栏copilot图标, 亲测有效
  • 数据分析Python转置文档代码
  • 分布式搜索引擎Elasticsearch(三)
  • 告别充电焦虑:移动充电机器人的革命性解决方案
  • 3D 目标检测:从萌芽到前沿的技术演进之路