有没有办法防止opencv矩阵divison舍入

时间:2015-06-14 19:22:02

标签: c++ opencv

我有一个整数矩阵,我想对它执行整数除法。但opencv总是围绕结果。 我知道我可以手动划分每个元素,但我想知道有没有更好的方法呢?

Mat c = (Mat_ <int> (1,3) << 80,71,64 );
cout << c/8 << endl;

// result
//[10, 9, 8]

// desired result
//[10, 8, 8]

2 个答案:

答案 0 :(得分:2)

与@ GPPK的可选方法类似,您可以通过以下方式破解:

Mat tmp, dst;
c.convertTo(tmp, CV_64F);
tmp = tmp / 8 - 0.5;            // simulate to prevent rounding by -0.5
tmp.convertTo(dst, CV_32S);

cout << dst;

答案 1 :(得分:1)

问题在于使用ints,你不能用ints得到小数点,所以我不确定你是如何期望不会四舍五入的。

你真的有两个选择,我不认为你可以不使用其中一个选项

  1. 您有一个数学上正确的int矩阵划分[10, 9, 8]
  2. 您可以启动自己的除法功能,以便为您提供所需的结果。
  3. 选项2:

    伪代码:

    Create a double matrix
    perform the division to get the output [10.0, 8.875, 8.0]
    strip away any numbers after a decimal point [10.0, 8.0, 8.0]
    (optional) write these values back to a int matrix
    (result) [10, 8, 8]