iPhone App Замена зеленого экрана - PullRequest
1 голос
/ 14 мая 2011

В: Я хочу использовать камеру iPhone, чтобы сделать фотографию, а затем заменить зеленый экран на этой фотографии другой фотографией.

Какой лучший способ погрузиться в это?Я не мог найти много ресурсов в Интернете.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 14 мая 2011

Концептуально все, что вам нужно сделать, это циклически просмотреть данные пикселей фотографии, снятой телефоном, и для каждого пикселя, который не находится в пределах определенного диапазона зеленого цвета, скопировать пиксель в то же место на фоновом изображении.,

Вот пример, который я изменил из ответа keremic на другой вопрос stackoverflow.ПРИМЕЧАНИЕ: это не проверено и просто предназначено, чтобы дать вам представление о технике, которая будет работать

//Get data into C array
CGImageRef image = [UIImage CGImage];
NSUInteger width = CGImageGetWidth(image);
NSUInteger height = CGImageGetHeight(image);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel_ * width;
NSUInteger bitsPerComponent = 8;
unsigned char *data = malloc(height * width * bytesPerPixel);
// you will need to copy your background image into resulting_image_data. 
// which I am not showing here
unsigned char *resulting_image_data = malloc(height * width * bytesPerPixel);
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);

CGContextDrawImage(context, CGRectMake(0, 0, width, height));
CGContextRelease(context);

//loop through each pixel
for(int row = 0; row < height; row++){
  for(int col = 0; col < width*bytesPerPixel; col=col+4){
    red = data[col];
    green = data[col + 1];
    blue = data[col + 2];
    alpha = data[col + 3];
    // if the pixel is within a shade of green
    if(!(green > 250 && red < 10 && blue < 10)){
      //copy them over to the background image
      resulting_image_data[row*col] = red;
      resulting_image_data[row*col+1] = green;
      resulting_image_data[row*col+2] = blue;
      resulting_image_data[row*col+3] = alpha;
    }
  }
}

//covert resulting_image_data into a UIImage
0 голосов
/ 14 мая 2011

Посмотрите на компиляцию OpenCV для iPhone - задача не из легких, но она дает вам доступ ко всей библиотеке действительно хороших инструментов обработки изображений.

Я использую openCV для приложения, которое я разрабатываю в данный момент (не все, что отличается от вашего) - для того, что вы пытаетесь сделать, openCV будет отличным решением, хотя и требует некоторого изучения и т.д. После того, как вы запустите OpenCV, реальная задача удаления зеленого цвета не должна быть слишком сложной.

Редактировать: Эта ссылка будет полезным ресурсом, если вы решите использовать OpenCV: Компиляция OpenCV для iOS

...