Q : iPhone 카메라를 사용하여 사진을 찍은 다음 해당 사진의 녹색 화면을 다른 사진으로 바꿉니다.iPhone 응용 프로그램 Green Screen Replacement
이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 온라인에서 많은 리소스를 찾을 수 없었습니다.
미리 감사드립니다.
Q : iPhone 카메라를 사용하여 사진을 찍은 다음 해당 사진의 녹색 화면을 다른 사진으로 바꿉니다.iPhone 응용 프로그램 Green Screen Replacement
이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 온라인에서 많은 리소스를 찾을 수 없었습니다.
미리 감사드립니다.
개념적으로, 당신은 전화로 촬영 한 사진의 픽셀 데이터를 통해 루프 할 필요가 모든 것을, 녹색의 특정 범위에 속하지 않는 각 픽셀에 대해 픽셀을 배경 이미지의 동일한 위치에 복사합니다.
여기 keremic의 답변 another 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
iPhone 용 OpenCV를 컴파일 해보십시오. 쉬운 작업은 아니지만 정말 멋진 이미지 처리 도구의 전체 라이브러리에 대한 액세스를 제공합니다.
저는 현재 개발중인 응용 프로그램에 openCV를 사용하고 있습니다. (여러분의 것과 다르지는 않습니다.) - 여러분이하려는 것을 위해 openCV는 훌륭한 해결책이 될 것입니다. OpenCV를 작동 시키면 녹색 제거의 실제 작업이 너무 어려워서는 안됩니다.
편집 : 당신이 OpenCV의를 사용하기로 결정하는 경우이 링크가 도움이 자원이 될 것이다 : Compiling OpenCV for iOS
작동합니다, 당신은 그것을 통해 당신 루프로 주변 픽셀을보고 몇 가지 개선 할 수있는 기술의 아이디어를 제공하기위한 것입니다 . 주변 픽셀의 대부분이 녹색이지만 현재 픽셀이 아닌 경우 녹색 화면의 일부일 수 있습니다 (그러나 픽셀이 녹색으로 보이지 않는 이유가 무엇이든). 또한 유사한 기술을 사용하면 감지 된 녹색 화면 부분의 가장자리를 부드럽게 만들 수 있습니다. 아마도 조금 더 멋지게 보일 것입니다. –
+1 요르단. 좋은 생각! –