8.Mat类支持的运算
在进行数据处理时需要对数据进行加减乘除运算,Mat类变量支持矩阵的加减乘除运算,代码清单如2-17
代码清单2-17 Mat类的加减法运算 cv::Mat a = (cv::Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9); cv::Mat b = (cv::Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9); cv::Mat c = (cv::Mat_<double>(3, 3) << 1.0, 2.1, 3.2, 4.0, 5.1, 6.2, 2, 2, 2); cv::Mat d = (cv::Mat_<double>(3, 3) << 1.0, 2.1, 3.2, 4.0, 5.1, 6.2, 2, 2, 2); cv::Mat e, f, g, h, i; e = a + b; f = c - d; g = 2 * a; h = d / 2.0; i = a – 1;
需要注意的是,当两个Mat类变量加减运算时必须保证数据类型相同。进行乘除法运算时结果保留与Mat类型相同的数据类型,例如:double类型的常数与int类型的Mat类运算结果仍是int类型。
在对图像进行卷积运算时,需要两个矩阵进行乘法运算,OpenCV不仅提供了两个Mat类矩阵的乘法运算,而且定义了两个矩阵的内积和对应位的乘法运算,代码清单如2-18.
代码清单2-18 两个Mat类矩阵的乘法运算 cv::Mat j, m; double k; j = c*d; k = a.dot(b); m = a.mul(b);
"*"运算符表示两个矩阵的数学乘积,例如在A3*3 * B3*3 = C中,C中的每一个元素符合:Cij = Ai1B1i + Ai2B2i + Ai3B3i ,第一个矩阵的列数必须与第二个矩阵的行数相同,数据类型必须是CV_32FC1,CV_64FC1,CV_32FC2,CV_64FC2中的一种;
dot()表示矩阵内积,它会将矩阵拓展成一个行向量一个列向量,对应位置相乘相加:f = d1e1 + d2e2 + d3e3,.dot()运算的结果是double类型;
mul()的运算是对应位置相乘:Cij = AijBij,数据类型可以是Mat允许的任何数据类型。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!