fixed mixed-type array operations (bug #2336)
This commit is contained in:
parent
738d3fef38
commit
1ded1597e7
@ -1224,7 +1224,7 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
bool haveMask = !_mask.empty();
|
||||
bool reallocate = false;
|
||||
|
||||
if( kind1 == kind2 && src1.dims <= 2 && src2.dims <= 2 &&
|
||||
if( (kind1 == kind2 || src1.channels() == 1) && src1.dims <= 2 && src2.dims <= 2 &&
|
||||
src1.size() == src2.size() && src1.type() == src2.type() &&
|
||||
!haveMask && ((!_dst.fixedType() && (dtype < 0 || CV_MAT_DEPTH(dtype) == src1.depth())) ||
|
||||
(_dst.fixedType() && _dst.type() == _src1.type())) )
|
||||
@ -1238,8 +1238,7 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
|
||||
|
||||
bool haveScalar = false, swapped12 = false;
|
||||
|
||||
if( (kind1 == _InputArray::MATX) + (kind2 == _InputArray::MATX) == 1 ||
|
||||
src1.size != src2.size || src1.channels() != src2.channels() )
|
||||
if( src1.size != src2.size || src1.channels() != src2.channels() )
|
||||
{
|
||||
if( checkScalar(src1, src2.type(), kind1, kind2) )
|
||||
{
|
||||
|
@ -959,9 +959,16 @@ bool CV_OperationsTest::operations1()
|
||||
minval == -7 && maxval == 12))
|
||||
throw test_excep();
|
||||
|
||||
Matx33f b(1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f), c;
|
||||
Matx33f b(1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f);
|
||||
Mat c;
|
||||
add(Mat::zeros(3, 3, CV_32F), b, c);
|
||||
CV_Assert( norm(b, c, CV_C) == 0 );
|
||||
|
||||
add(Mat::zeros(3, 3, CV_64F), b, c, noArray(), c.type());
|
||||
CV_Assert( norm(b, c, CV_C) == 0 );
|
||||
|
||||
add(Mat::zeros(6, 1, CV_64F), 1, c, noArray(), c.type());
|
||||
CV_Assert( norm(Matx61f(1.f, 1.f, 1.f, 1.f, 1.f, 1.f), c, CV_C) == 0 );
|
||||
}
|
||||
catch(const test_excep&)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user