C++ uchar/浮点矩阵-逐元素除法和乘法

C++ uchar/浮点矩阵-逐元素除法和乘法,c++,matlab,opencv,matrix,C++,Matlab,Opencv,Matrix,我想将类型为cv_8UC1的矩阵cv::Mat src除以类型为float的标量,并将结果存储在类型为cv_32FC1的新矩阵srcN中: 我现在正在这样做: for(unsigned j=0;j<src.rows;j++) for(unsigned i=0;i<src.cols;i++) srcN.at<float>(j,i) = ((int) src.at<uchar>(j,i))/A; 用于(未签名的j=0;j。它们使用BLAS

我想将类型为
cv_8UC1
的矩阵
cv::Mat src
除以类型为
float
的标量,并将结果存储在类型为
cv_32FC1
的新矩阵
srcN
中: 我现在正在这样做:

for(unsigned j=0;j<src.rows;j++)
    for(unsigned i=0;i<src.cols;i++)
        srcN.at<float>(j,i) = ((int) src.at<uchar>(j,i))/A;

用于(未签名的j=0;j。它们使用BLAS/MAGMA Fortran库。@DanMašek我认为这是一样的!?问题在于src中的uchar,在除以或之前应该是intmultiplying@ROS_OPENCV哦,对了,那是不相关的——出于某种原因,我认为Mat/scalar没有重载。|循环体中对
int
的强制转换是多余的--由于
A
是float,除法的另一个操作数被隐式转换为float/A;
@DanMašek感谢我一直在寻找的东西..但是它确实需要与loops@ROS_OPENCV再想一想,你实际上在做的是将
Mat
转换成不同的类型,同时进行缩放。这正是
convertTo
可以做的。
src.convertTo(srcN,cv32fc1,(1/A);
。他们使用BLAS/MAGMA Fortran库。@DanMašek我认为这是一样的!?问题在于src中的uchar,在除以或之前应该是intmultiplying@ROS_OPENCV哦,对了,这是不相关的——出于某种原因,我认为Mat/scalar没有重载。|循环体中对
int
的强制转换是多余的——因为
A
是float,除法的另一个操作数隐式转换为float。因此,您真正需要的是/A;@DanMašek感谢我一直在寻找的东西..但是它确实需要与loops@ROS_OPENCV再想一想,你实际上在做的是将
Mat
转换成不同的类型,同时进行缩放。这正是
convertTo
可以做的。
src.convertTo(srcN,cv32fc1,(1/A));