@@ -997,6 +997,13 @@ void cv::add( InputArray src1, InputArray src2, OutputArray dst,
997
997
{
998
998
CV_INSTRUMENT_REGION ();
999
999
1000
+ CV_Assert (src1.empty () == src2.empty ());
1001
+ if (src1.empty () && src2.empty ())
1002
+ {
1003
+ dst.release ();
1004
+ return ;
1005
+ }
1006
+
1000
1007
arithm_op (src1, src2, dst, mask, dtype, getAddTab (), false , 0 , OCL_OP_ADD );
1001
1008
}
1002
1009
@@ -1005,6 +1012,13 @@ void cv::subtract( InputArray _src1, InputArray _src2, OutputArray _dst,
1005
1012
{
1006
1013
CV_INSTRUMENT_REGION ();
1007
1014
1015
+ CV_Assert (_src1.empty () == _src2.empty ());
1016
+ if (_src1.empty () && _src2.empty ())
1017
+ {
1018
+ _dst.release ();
1019
+ return ;
1020
+ }
1021
+
1008
1022
ExtendedTypeFunc subExtFunc = getSubExtFunc (_src1.depth (), _src2.depth (), dtype < 0 ? _dst.depth () : dtype);
1009
1023
arithm_op (_src1, _src2, _dst, mask, dtype, getSubTab (), false , 0 , OCL_OP_SUB,
1010
1024
/* extendedFunc */ subExtFunc);
@@ -1014,6 +1028,13 @@ void cv::absdiff( InputArray src1, InputArray src2, OutputArray dst )
1014
1028
{
1015
1029
CV_INSTRUMENT_REGION ();
1016
1030
1031
+ CV_Assert (src1.empty () == src2.empty ());
1032
+ if (src1.empty () && src2.empty ())
1033
+ {
1034
+ dst.release ();
1035
+ return ;
1036
+ }
1037
+
1017
1038
arithm_op (src1, src2, dst, noArray (), -1 , getAbsDiffTab (), false , 0 , OCL_OP_ABSDIFF);
1018
1039
}
1019
1040
@@ -1131,6 +1152,13 @@ void divide(InputArray src1, InputArray src2,
1131
1152
{
1132
1153
CV_INSTRUMENT_REGION ();
1133
1154
1155
+ CV_Assert (src1.empty () == src2.empty ());
1156
+ if (src1.empty () && src2.empty ())
1157
+ {
1158
+ dst.release ();
1159
+ return ;
1160
+ }
1161
+
1134
1162
arithm_op (src1, src2, dst, noArray (), dtype, getDivTab (), true , &scale, OCL_OP_DIV_SCALE);
1135
1163
}
1136
1164
@@ -1139,6 +1167,12 @@ void divide(double scale, InputArray src2,
1139
1167
{
1140
1168
CV_INSTRUMENT_REGION ();
1141
1169
1170
+ if (src2.empty ())
1171
+ {
1172
+ dst.release ();
1173
+ return ;
1174
+ }
1175
+
1142
1176
arithm_op (src2, src2, dst, noArray (), dtype, getRecipTab (), true , &scale, OCL_OP_RECIP_SCALE);
1143
1177
}
1144
1178
@@ -1172,6 +1206,13 @@ void cv::addWeighted( InputArray src1, double alpha, InputArray src2,
1172
1206
{
1173
1207
CV_INSTRUMENT_REGION ();
1174
1208
1209
+ CV_Assert (src1.empty () == src2.empty ());
1210
+ if (src1.empty () && src2.empty ())
1211
+ {
1212
+ dst.release ();
1213
+ return ;
1214
+ }
1215
+
1175
1216
double scalars[] = {alpha, beta, gamma};
1176
1217
arithm_op (src1, src2, dst, noArray (), dtype, getAddWeightedTab (), true , scalars, OCL_OP_ADDW);
1177
1218
}
0 commit comments