Restore core multiply/divide depth to CV_64F value.
After setting depth to CV_32F for non double types this produces difference in results. I've attached test that reproduce this issue.The issue was found during anali broken GPU tests for multiply/device functions.
This commit is contained in:
parent
b6a2717c2b
commit
99c666691e
@ -1281,7 +1281,7 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
depth2 = CV_32F;
|
||||
}
|
||||
else
|
||||
depth2 = src1.depth() < CV_32S || src1.depth() == CV_32F ? CV_32F : CV_64F;
|
||||
depth2 = CV_64F;
|
||||
}
|
||||
|
||||
int cn = src1.channels(), depth1 = src1.depth(), wtype;
|
||||
|
@ -1522,4 +1522,12 @@ protected:
|
||||
|
||||
TEST(Core_ArithmMask, uninitialized) { CV_ArithmMaskTest test; test.safe_run(); }
|
||||
|
||||
TEST(Multiply, FloatingPointRounding)
|
||||
{
|
||||
cv::Mat src(1, 1, CV_8UC1, cv::Scalar::all(110)), dst;
|
||||
cv::Scalar s(147.286359696927, 1, 1 ,1);
|
||||
|
||||
cv::multiply(src, s, dst, 1, CV_16U);
|
||||
// with CV_32F this produce result 16202
|
||||
ASSERT_EQ(dst.at<ushort>(0,0), 16201);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user