namespace cv
{
+//This and its overload below are used in various MatExpr operator overloads
+//implemented to check that Matrix operands exist.
+static void checkOperandsExist(const Mat& a)
+{
+ if (a.empty())
+ {
+ CV_Error(CV_StsBadArg, "Matrix operand is an empty matrix.");
+ }
+}
+
+static void checkOperandsExist(const Mat& a, const Mat& b)
+{
+ if (a.empty() || b.empty())
+ {
+ CV_Error(CV_StsBadArg, "One or more matrix operands are empty.");
+ }
+}
+
+
class MatOp_Identity CV_FINAL : public MatOp
{
public:
MatExpr operator + (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, b, 1, 1);
return e;
MatExpr operator + (const Mat& a, const Scalar& s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, Mat(), 1, 0, s);
return e;
MatExpr operator + (const Scalar& s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, Mat(), 1, 0, s);
return e;
MatExpr operator + (const Mat& m, const MatExpr& e)
{
+ checkOperandsExist(m);
MatExpr en;
e.op->add(e, MatExpr(m), en);
return en;
MatExpr operator - (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, b, 1, -1);
return e;
MatExpr operator - (const Mat& a, const Scalar& s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, Mat(), 1, 0, -s);
return e;
MatExpr operator - (const Scalar& s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, Mat(), -1, 0, s);
return e;
MatExpr operator - (const MatExpr& e, const Mat& m)
{
+ checkOperandsExist(m);
MatExpr en;
e.op->subtract(e, MatExpr(m), en);
return en;
MatExpr operator - (const Mat& m, const MatExpr& e)
{
+ checkOperandsExist(m);
MatExpr en;
e.op->subtract(MatExpr(m), e, en);
return en;
MatExpr operator - (const Mat& m)
{
+ checkOperandsExist(m);
MatExpr e;
MatOp_AddEx::makeExpr(e, m, Mat(), -1, 0);
return e;
MatExpr operator * (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_GEMM::makeExpr(e, 0, a, b);
return e;
MatExpr operator * (const Mat& a, double s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, Mat(), s, 0);
return e;
MatExpr operator * (double s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, Mat(), s, 0);
return e;
MatExpr operator * (const Mat& m, const MatExpr& e)
{
+ checkOperandsExist(m);
MatExpr en;
e.op->matmul(MatExpr(m), e, en);
return en;
MatExpr operator / (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Bin::makeExpr(e, '/', a, b);
return e;
MatExpr operator / (const Mat& a, double s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_AddEx::makeExpr(e, a, Mat(), 1./s, 0);
return e;
MatExpr operator / (double s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, '/', a, Mat(), s);
return e;
MatExpr operator / (const Mat& m, const MatExpr& e)
{
+ checkOperandsExist(m);
MatExpr en;
e.op->divide(MatExpr(m), e, en);
return en;
MatExpr operator < (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_LT, a, b);
return e;
MatExpr operator < (const Mat& a, double s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_LT, a, s);
return e;
MatExpr operator < (double s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_GT, a, s);
return e;
MatExpr operator <= (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_LE, a, b);
return e;
MatExpr operator <= (const Mat& a, double s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_LE, a, s);
return e;
MatExpr operator <= (double s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_GE, a, s);
return e;
MatExpr operator == (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_EQ, a, b);
return e;
MatExpr operator == (const Mat& a, double s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_EQ, a, s);
return e;
MatExpr operator == (double s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_EQ, a, s);
return e;
MatExpr operator != (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_NE, a, b);
return e;
MatExpr operator != (const Mat& a, double s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_NE, a, s);
return e;
MatExpr operator != (double s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_NE, a, s);
return e;
MatExpr operator >= (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_GE, a, b);
return e;
MatExpr operator >= (const Mat& a, double s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_GE, a, s);
return e;
MatExpr operator >= (double s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_LE, a, s);
return e;
MatExpr operator > (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_GT, a, b);
return e;
MatExpr operator > (const Mat& a, double s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_GT, a, s);
return e;
MatExpr operator > (double s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Cmp::makeExpr(e, CV_CMP_LT, a, s);
return e;
{
CV_INSTRUMENT_REGION();
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Bin::makeExpr(e, 'm', a, b);
return e;
{
CV_INSTRUMENT_REGION();
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, 'n', a, s);
return e;
{
CV_INSTRUMENT_REGION();
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, 'n', a, s);
return e;
{
CV_INSTRUMENT_REGION();
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Bin::makeExpr(e, 'M', a, b);
return e;
{
CV_INSTRUMENT_REGION();
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, 'N', a, s);
return e;
{
CV_INSTRUMENT_REGION();
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, 'N', a, s);
return e;
MatExpr operator & (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Bin::makeExpr(e, '&', a, b);
return e;
MatExpr operator & (const Mat& a, const Scalar& s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, '&', a, s);
return e;
MatExpr operator & (const Scalar& s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, '&', a, s);
return e;
MatExpr operator | (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Bin::makeExpr(e, '|', a, b);
return e;
MatExpr operator | (const Mat& a, const Scalar& s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, '|', a, s);
return e;
MatExpr operator | (const Scalar& s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, '|', a, s);
return e;
MatExpr operator ^ (const Mat& a, const Mat& b)
{
+ checkOperandsExist(a, b);
MatExpr e;
MatOp_Bin::makeExpr(e, '^', a, b);
return e;
MatExpr operator ^ (const Mat& a, const Scalar& s)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, '^', a, s);
return e;
MatExpr operator ^ (const Scalar& s, const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, '^', a, s);
return e;
MatExpr operator ~(const Mat& a)
{
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, '~', a, Scalar());
return e;
{
CV_INSTRUMENT_REGION();
+ checkOperandsExist(a);
MatExpr e;
MatOp_Bin::makeExpr(e, 'a', a, Scalar());
return e;
{
CV_INSTRUMENT_REGION();
+ checkOperandsExist(*this);
MatExpr e;
MatOp_T::makeExpr(e, *this);
return e;