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

时间:2012-01-30 17:29:01

标签: opencv matrix floating-point char constants

如果我有一个矩阵

cv :: Mat M;

并将其乘以常数

双c;

使用

结果= C * A;

其中c介于0和1之间

如何处理数据?我知道数据是uchar。如果像素值为26且c = 0.2,则结果为 截断(26 * 0.2)= 5?

非常感谢, 彼得。

3 个答案:

答案 0 :(得分:1)

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

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;

答案 1 :(得分:0)

根据OpenCV docs,数据被转换为double,在其上执行所需的操作,然后转换为目标类型:

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

其中a和b是双常数

答案 2 :(得分: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。