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); }
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); }