OpenCV:将矩阵乘以范围(0,1)内的常数。如何处理数据?

OpenCV:将矩阵乘以范围(0,1)内的常数。如何处理数据?,opencv,matrix,floating-point,char,constants,Opencv,Matrix,Floating Point,Char,Constants,如果我有一个矩阵 cv::Mat M 然后乘以一个常数 双c 使用 结果=c*A 其中c在0和1之间 数据是如何处理的?据我所知,这些数据是uchar提供的。如果像素值为26且c=0.2,结果是否为 截断(26*0.2)=5 多谢各位, Peter.1.)数据不一定具有uchar类型。 是的,你可以自己检查一下 cv::Mat m = cv::Mat::ones(3 , 1, cv::DataType<unsigned char>::type); double c = 0.2; m.

如果我有一个矩阵

cv::Mat M

然后乘以一个常数

双c

使用

结果=c*A

其中c在0和1之间

数据是如何处理的?据我所知,这些数据是uchar提供的。如果像素值为26且c=0.2,结果是否为 截断(26*0.2)=5

多谢各位, Peter.

1.)数据不一定具有uchar类型。
是的,你可以自己检查一下

cv::Mat m = cv::Mat::ones(3 , 1, cv::DataType<unsigned char>::type);
double c = 0.2;
m.at<unsigned char>(0 , 0) = 26;
m.at<unsigned char>(1 , 0) = 27;
m.at<unsigned char>(1 , 0) = 28;
cv::Mat res = c * m;
cout << "res = "<< endl << " "  << res << endl << endl;
cv::Mat m=cv::Mat::ones(3,1,cv::DataType::type);
双c=0.2;
m、 at(0,0)=26;
m、 at(1,0)=27;
m、 at(1,0)=28;
cv::Mat res=c*m;
cout1.)数据不一定具有uchar类型。
是的,你可以自己检查一下

cv::Mat m = cv::Mat::ones(3 , 1, cv::DataType<unsigned char>::type);
double c = 0.2;
m.at<unsigned char>(0 , 0) = 26;
m.at<unsigned char>(1 , 0) = 27;
m.at<unsigned char>(1 , 0) = 28;
cv::Mat res = c * m;
cout << "res = "<< endl << " "  << res << endl << endl;
cv::Mat m=cv::Mat::ones(3,1,cv::DataType::type);
双c=0.2;
m、 at(0,0)=26;
m、 at(1,0)=27;
m、 at(1,0)=28;
cv::Mat res=c*m;
cout根据OpenCV,数据被转换为double,对其执行所需的操作,然后转换为目标类型:

dst = (dst_type)((double)src*a+b);
其中a和b是双常量,根据OpenCV,数据转换为双常量,对其执行所需的操作,然后转换为目标类型:

dst = (dst_type)((double)src*a+b);

其中a和b是cvDiv注释中的双常数,我发现如下:

/* element-wise division/inversion with scaling:
    dst(idx) = src1(idx) * scale / src2(idx)
    or dst(idx) = scale / src2(idx) if src1 == 0 */
CVAPI(void)  cvDiv( const CvArr* src1, const CvArr* src2,
                    CvArr* dst, double scale CV_DEFAULT(1));

可能您可以使用“scale”参数作为常量,并将src1指定为0。

在cvDiv的注释中,我发现了以下内容:

/* element-wise division/inversion with scaling:
    dst(idx) = src1(idx) * scale / src2(idx)
    or dst(idx) = scale / src2(idx) if src1 == 0 */
CVAPI(void)  cvDiv( const CvArr* src1, const CvArr* src2,
                    CvArr* dst, double scale CV_DEFAULT(1));
可能您可以使用“scale”参数作为常量,并将src1指定为0