opencv C++矩阵操作
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.剩下的会报错。