首页 > 编程语言 > 详细

opencv C++矩阵操作

时间:2019-09-09 23:12:47      阅读:116      评论:0      收藏:0      [点我收藏+]
int main(){
    cv::Mat src1=(cv::Mat_<float>(2,3)<<1,2,3,4,5,6);
    cv::Mat src2=(cv::Mat_<float>(2,3)<<11,12,13,14,15,16);
    cv::Mat src3=(cv::Mat_<float>(3,2)<<11,12,13,14,15,16);
    cv::Mat res=src1+src2;
    std::cout<<"加法:"<<res<<std::endl;
    std::cout<<std::endl;
    res=src1-src2;
    std::cout<<"减法:"<<res<<std::endl;
    std::cout<<std::endl;
    cv::multiply(src1,src2,res);  // void multiply(InputArray src1, InputArray src2,OutputArray dst, double scale = 1, int dtype = -1);
    std::cout<<"点乘:"<<res<<std::endl;
    std::cout<<std::endl;
    res=src1/src2;
    std::cout<<"点除:"<<res<<std::endl;
    std::cout<<std::endl;
    res=src1*src3;  // 乘法(矩阵相乘)必须是float类型否则会报错。
    std::cout<<"乘法(矩阵相乘):"<<res<<std::endl;
    std::cout<<std::endl;

    cv::Mat res1;
    cv::add(src1,src2,res1);  // add(InputArray src1, InputArray src2, OutputArray dst,InputArray mask = noArray(), int dtype = -1);
    std::cout<<"加法:"<<res1<<std::endl;
    std::cout<<std::endl;
    cv::subtract(src1,src2,res1);  // subtract(InputArray src1, InputArray src2, OutputArray dst,InputArray mask = noArray(), int dtype = -1);
    std::cout<<"减法:"<<res1<<std::endl;
    std::cout<<std::endl;
    res1=src1.mul(src2);  // 数据类型必须相同
    std::cout<<"点乘:"<<res1<<std::endl;
    std::cout<<std::endl;
    gemm(src1,src3,1,NULL,0,res1);  // 乘法(矩阵相乘)必须是float类型否则会报错。
    // gemm(InputArray src1, InputArray src2, double alpha,InputArray src3, double beta, OutputArray dst, int flags = 0);
    // gemm也只能接受CV_32FC1、CV_64FC1、CV_32FC2、CV_64FC2数据类型的Mat.
    std::cout<<"乘法(矩阵相乘):"<<res<<std::endl;
    std::cout<<std::endl;

    cv::Mat mat1=(cv::Mat_<int>(2,3)<<1,4,9,16,25,36);  // 注意:cv::Mat_不能写为cv::Mat
    cv::Mat dest;
    // 幂函数,其幂指数确定不变,而幂底数为自变量;
    // 指数函数却是底数确定不变,而指数为自变量。
    // 幂指函数就是幂底数和幂指数同时都为自变量的函数。
    pow(mat1,2,dest);  // 幂函数
    std::cout<<"幂函数:"<<dest<<std::endl;
    std::cout<<std::endl;

    cv::Vec3b src4(1,2,3);
    cv::Vec3b src5(1,2,3);
    cv::Vec3b dst=src4+src5;
    std::cout<<dst<<std::endl;
    return 0;
}

注意:矩阵乘法只能接受CV_32FC1、CV_64FC1、CV_32FC2、CV_64FC2数据类型的Mat.剩下的会报错。

opencv C++矩阵操作

原文:https://www.cnblogs.com/ligei/p/11494552.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!