Merge pull request #3629 from nstiurca:matx-fix

This commit is contained in:
Vadim Pisarevsky 2015-01-22 09:43:33 +00:00
commit f93be25cc8
2 changed files with 111 additions and 0 deletions

View File

@ -2644,6 +2644,10 @@ void _OutputArray::assign(const UMat& u) const
{ {
u.copyTo(*(Mat*)obj); // TODO check u.getMat() u.copyTo(*(Mat*)obj); // TODO check u.getMat()
} }
else if (k == MATX)
{
u.copyTo(getMat()); // TODO check u.getMat()
}
else else
{ {
CV_Error(Error::StsNotImplemented, ""); CV_Error(Error::StsNotImplemented, "");
@ -2662,6 +2666,10 @@ void _OutputArray::assign(const Mat& m) const
{ {
*(Mat*)obj = m; *(Mat*)obj = m;
} }
else if (k == MATX)
{
m.copyTo(getMat());
}
else else
{ {
CV_Error(Error::StsNotImplemented, ""); CV_Error(Error::StsNotImplemented, "");

View File

@ -26,3 +26,106 @@ TEST(Core_SaturateCast, NegativeNotClipped)
ASSERT_EQ(0xffffffff, val); ASSERT_EQ(0xffffffff, val);
} }
template<typename T, typename U>
static double maxAbsDiff(const T &t, const U &u)
{
Mat_<double> d;
absdiff(t, u, d);
double ret;
minMaxLoc(d, NULL, &ret);
return ret;
}
TEST(Core_OutputArrayAssign, _Matxd_Matd)
{
Mat expected = (Mat_<double>(2,3) << 1, 2, 3, .1, .2, .3);
Matx23d actualx;
{
OutputArray oa(actualx);
oa.assign(expected);
}
Mat actual = (Mat) actualx;
EXPECT_LE(maxAbsDiff(expected, actual), 0.0);
}
TEST(Core_OutputArrayAssign, _Matxd_Matf)
{
Mat expected = (Mat_<float>(2,3) << 1, 2, 3, .1, .2, .3);
Matx23d actualx;
{
OutputArray oa(actualx);
oa.assign(expected);
}
Mat actual = (Mat) actualx;
EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON);
}
TEST(Core_OutputArrayAssign, _Matxf_Matd)
{
Mat expected = (Mat_<double>(2,3) << 1, 2, 3, .1, .2, .3);
Matx23f actualx;
{
OutputArray oa(actualx);
oa.assign(expected);
}
Mat actual = (Mat) actualx;
EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON);
}
TEST(Core_OutputArrayAssign, _Matxd_UMatd)
{
Mat expected = (Mat_<double>(2,3) << 1, 2, 3, .1, .2, .3);
UMat uexpected = expected.getUMat(ACCESS_READ);
Matx23d actualx;
{
OutputArray oa(actualx);
oa.assign(uexpected);
}
Mat actual = (Mat) actualx;
EXPECT_LE(maxAbsDiff(expected, actual), 0.0);
}
TEST(Core_OutputArrayAssign, _Matxd_UMatf)
{
Mat expected = (Mat_<float>(2,3) << 1, 2, 3, .1, .2, .3);
UMat uexpected = expected.getUMat(ACCESS_READ);
Matx23d actualx;
{
OutputArray oa(actualx);
oa.assign(uexpected);
}
Mat actual = (Mat) actualx;
EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON);
}
TEST(Core_OutputArrayAssign, _Matxf_UMatd)
{
Mat expected = (Mat_<double>(2,3) << 1, 2, 3, .1, .2, .3);
UMat uexpected = expected.getUMat(ACCESS_READ);
Matx23f actualx;
{
OutputArray oa(actualx);
oa.assign(uexpected);
}
Mat actual = (Mat) actualx;
EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON);
}