Example #1
0
JNIEXPORT void JNICALL Java_org_opencv_video_BackgroundSubtractor_apply_11
  (JNIEnv* env, jclass , jlong self, jlong image_nativeObj, jlong fgmask_nativeObj)
{
    try {
        LOGD("video::apply_11()");
        BackgroundSubtractor* me = (BackgroundSubtractor*) self; //TODO: check for NULL
        Mat& image = *((Mat*)image_nativeObj);
        Mat& fgmask = *((Mat*)fgmask_nativeObj);
        me->operator ()( image, fgmask );
        return;
    } catch(cv::Exception e) {
        LOGD("video::apply_11() catched cv::Exception: %s", e.what());
        jclass je = env->FindClass("org/opencv/core/CvException");
        if(!je) je = env->FindClass("java/lang/Exception");
        env->ThrowNew(je, e.what());
        return;
    } catch (...) {
        LOGD("video::apply_11() catched unknown exception (...)");
        jclass je = env->FindClass("java/lang/Exception");
        env->ThrowNew(je, "Unknown exception in JNI code {video::apply_11()}");
        return;
    }
}
Example #2
0
bool Pipeline::apply_backgroundSubtractor(json_t *pStage, json_t *pStageModel, Model &model) {
  validateImage(model.image);
  int history = jo_int(pStage, "history", 0, model.argMap);
  float varThreshold = jo_float(pStage, "varThreshold", 16, model.argMap);
  bool bShadowDetection = jo_bool(pStage, "bShadowDetection", TRUE, model.argMap);
  string background = jo_string(pStage, "background", "", model.argMap);
  string method = jo_string(pStage, "method", "MOG2", model.argMap);
  string stageName = jo_string(pStage, "name", method.c_str(), model.argMap);
  int maxval = 255;
  double learningRate = jo_double(pStage, "learningRate", -1, model.argMap);
  const char *errMsg = NULL;
  StageDataPtr pStageData = model.stageDataMap[stageName];

  BackgroundSubtractor *pSubtractor;
  bool is_absdiff = false;
  if (!errMsg) {
    if (method.compare("MOG2") == 0) {
      if (pStageData) {
	pSubtractor = ((SubtractorStageData *) pStageData)->pSubtractor;
      } else {
	pSubtractor = new BackgroundSubtractorMOG2(history, varThreshold, bShadowDetection);
	model.stageDataMap[stageName] = new SubtractorStageData(stageName, pSubtractor);
      }
    } else if (method.compare("absdiff") == 0) {
      is_absdiff = true;
    } else {
        errMsg = "Expected method: MOG2";
    }
  }

  Mat bgImage;
  if (!background.empty()) {
    if (history != 0) {
      errMsg = "Expected history=0 if background image is specified";
    } else {
      if (model.image.channels() == 1) {
        bgImage = imread(background.c_str(), CV_LOAD_IMAGE_GRAYSCALE);
      } else {
        bgImage = imread(background.c_str(), CV_LOAD_IMAGE_COLOR);
      }
      if (bgImage.data) {
        LOGTRACE2("apply_backgroundSubtractor(%s) %s", background.c_str(), matInfo(bgImage).c_str());
        if (model.image.rows!=bgImage.rows || model.image.cols!=bgImage.cols) {
          errMsg = "Expected background image of same size as pipeline image";
        }
      } else {
        errMsg = "Could not load background image";
      }
    }
  }
  if (!errMsg) {
    if (history < 0) {
      errMsg = "Expected history >= 0";
    }
  }

  if (!errMsg) { 
    Mat fgMask;
    if (is_absdiff) {
      absdiff(model.image, bgImage, fgMask);
      if (fgMask.channels() > 1) {
        cvtColor(fgMask, fgMask, CV_BGR2GRAY);
      }
      threshold(fgMask, model.image, varThreshold, maxval, THRESH_BINARY);
    } else {
      if (bgImage.data) {
	pSubtractor->operator()(bgImage, fgMask, learningRate);
      }
      pSubtractor->operator()(model.image, fgMask, learningRate);
      model.image = fgMask;
    }
  }

  return stageOK("apply_backgroundSubtractor(%s) %s", errMsg, pStage, pStageModel);
}