Пример #1
0
void OFVideoGrabberApp::update(){
	unsigned char *buffer = (unsigned char*)malloc(camWidth*camHeight);
	ofBackground(80, 80, 80);
	videoGrabber.grabFrame();
    if(videoGrabber.isFrameNew()){
        unsigned char* pixels = videoGrabber.getPixels();
		convert_to_greyscale(pixels, camWidth, camHeight, buffer);
		edge_detect(buffer, camWidth, camHeight, filterBuffer);
        filteredTexture.loadData(filterBuffer, camWidth, camHeight, GL_LUMINANCE);
    }
	free(buffer);
}
Пример #2
0
void scan_image(SDL_Surface* image) {
  predict_cascade_t* cascade = load_adaboost("adaboost_test2.txt");
  features_array_t* features = alloc_features_array();
  Uint32 red_pixel = SDL_MapRGB(image->format, 0, 255, 0);
  for (int i = 0; i < 162336; ++i) {
    feature_t f;
    f.i = f.j = f.w = f.h = f.charac = f.value = -1;
    add_feature(f, features);
  }

  const int padding = 2;
  for (int scale = 24; scale < 100; scale *= 1.25) {
    for (int i = 0; i < image->w - scale; i += padding) {
      for (int j = 0; j < image->h - scale; j += padding) {
        SDL_Surface* sub_window = extract_image(image, i, j, scale, scale);
        convert_to_greyscale(sub_window);
        //if (scale != 24) {
        sub_window = scale_surface(sub_window, 24, 24);
        //}
        integral_image_t* integral_image = alloc_integral_image(sub_window->w, sub_window->h);
        convert_to_integral_image(sub_window, integral_image);
        SDL_FreeSurface(sub_window);

        int k = 0;
        cascade_t layer;
        printf("\n=============================\n\n");
        printf("x=%d y=%d\n", i, j);
        while (k < cascade->nb_layers) {
          compute_cascade_features(features, cascade->layers[k], integral_image);
          layer.nb_features = cascade->layers[k]->T;
          layer.alphas = cascade->layers[k]->alphas;
          layer.thresholds = cascade->layers[k]->thresholds;
          layer.parities = cascade->layers[k]->parities;
          layer.features = cascade->layers[k]->features;
          layer.strong_threshold = cascade->layers[k]->strong_threshold;
          if (!strong_classify(features, &layer)) {
            printf("non face layer=%d\n", k);
            break;
          }
          ++k;
        }

        free_integral_image(integral_image);

        if (k == cascade->nb_layers) {
          printf("---------------------------------------------------------detected\n");
          for (int x = i; x < i + scale; ++x) {
            putpixel(image, x, j, red_pixel);
          }
          for (int y = j; y < j + scale; ++y) {
            putpixel(image, i, y, red_pixel);
          }
          for (int x = i; x < i + scale; ++x) {
            putpixel(image, x, j + scale, red_pixel);
          }
          for (int y = j; y < j + scale; ++y) {
            putpixel(image, i + scale, y, red_pixel);
          }
        }
      }
    }
  }
  SDL_SaveBMP(image, "../SDL/detection.bmp");
  free_features_array(features);
  free_predict_cascade(cascade);
}