2011-05-13 15 views
1

Q:iPhoneカメラを使用して写真を撮ってから、その写真の緑色の画面を別の写真に置き換えたいと考えています。iPhoneアプリGreen Screen Replacement

これにはどのような方法がありますか?私はオンラインで多くのリソースを見つけることができませんでした。

ありがとうございます!

答えて

2

は概念的には、あなたがする必要があることすべては、電話で撮影した写真の画素データをループであります特定の緑色の範囲内にないピクセルごとに、ピクセルを背景画像の同じ場所にコピーします。

ここではkeremicの答えをanother stackoverflow questionに変更した例を示します。 注:これはテストされていないし、ちょうどあなたがこのようにそれを行う場合、あなたはそれをあなたのループのように周囲のピクセルを見て、いくつかの改善を行うことができ

//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 
+2

に動作します技術のアイデアを与えることを意図。周囲のピクセルのほとんどが緑色で、現在のピクセルが緑色でない場合は、おそらく実際には緑の画面の一部です(ただし、何らかの理由でピクセルが緑色に見えないため)。また、同様の手法を使用して、検出された緑色の画面部分のエッジを滑らかにしたい場合があります。おそらく少し上手く見えます。 –

+0

+1ヨルダン。良いアイデア! –

0

OpenCV for iPhoneをコンパイルするのは簡単な作業ではありませんが、本当に素晴らしい画像処理ツールのライブラリ全体にアクセスできます。

私は現時点で開発しているアプリケーションにopenCVを使用しています(自分のものと似ているわけではありません) - あなたがやろうとしていることは、openCVは素晴らしい解決策になります。あなたがOpenCVを使っていると、緑を取り除くという実際の仕事はそれほど難しくありません。

編集:あなたがOpenCVのを使用することを決定しない場合このリンクは役に立ちリソースになります:Compiling OpenCV for iOS