我有一个整数矩阵,我想对它执行整数除法。但opencv总是围绕结果。 我知道我可以手动划分每个元素,但我想知道有没有更好的方法呢?
Mat c = (Mat_ <int> (1,3) << 80,71,64 );
cout << c/8 << endl;
// result
//[10, 9, 8]
// desired result
//[10, 8, 8]
答案 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
得到小数点,所以我不确定你是如何期望不会四舍五入的。
你真的有两个选择,我不认为你可以不使用其中一个选项:
int
矩阵划分[10, 9, 8]
选项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]