2012-05-20 6 views
5

私は2つの画像に従っています。背景は完全に異なる画像である可能性があります。単純な色だけではありません。石英:2つの画像の差分画像を取​​得する

Image number oneenter image description here

だから、基本的に私はこれらの2枚の画像の差分画像を取​​得したい2枚の画像の差分画像は、同じサイズの画像ですが、

enter image description here

、すなわち ピクセルは変更されていない透明に設定されています。差分画像は、2番目の画像の色のdiffピクセルから構成されます。

私はコアグラフィックスのテクニックに基づいてソリューションを探していますが、ループ内のピクセルをすべて実行することはお勧めしません。私はパフォーマンスについて気にします。

私がQuartzを初めて使ったので、マスクでこれを達成することは可能でしょうか? または別の方法をお勧めします。私はモードをブレンド違いを使用している場合、それは、画素の右の色を保持していないとして実際にそれは私の問題を解決しないモード をブレンド差を利用して上

を更新。私は上記の2枚の画像に差ブレンドモードを適用した場合、私は、次の買ってあげるのピクセルの色を反転しているために、私はそれらを反転した場合、私は、次の取得思わ

enter image description here

enter image description here

実際に私が望んでいないものは、ピクセルの色がまったく違っている

+0

でhttp答えを受け入れ://stackoverflow.com/questions/3901404/create-a-mask-from-difference-between-two-images-iphoneが役立つようです。 –

+0

リンクのための@rokjarcありがとうございますが、違いのブレンドモードは私の場合の解決策ではありません。 – deimus

+0

'CGContextSetBlendMode(kCGBlendModeDifference);を設定した後にもう一方のイメージを描画するとどうなりますか? –

答えて

6

CGContextSetBlendMode(kCGBlendModeDifference); 

最初の画像を描画し、ブレンドモードを差異に設定して2番目の画像を描画すると、私のコメントで示唆したように違いが得られます。これは、(あなたのアップデートの質問に見られるように)反転画像を与えます。イメージを反転するには、(ブレンドモードが "差"に設定されているため)同じ矩形を白色で塗りつぶすことができます。

CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); 
CGContextFillRect(context, frame); 

サンプルコードは、すべてこれは(:)のdrawRect内の以下に見られることができません。

CGContextRef context = UIGraphicsGetCurrentContext(); 

// Your two images 
CGImageRef img1 = [[UIImage imageNamed:@"Ygsvt.png"] CGImage]; 
CGImageRef img2 = [[UIImage imageNamed:@"ay5DB.png"] CGImage]; 

// Some arbitrary frame 
CGRect frame = CGRectMake(30, 30, 100, 100); 

// Invert the coordinates to not draw upside down 
CGContextTranslateCTM(context, 0, frame.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 

// Draw original image 
CGContextDrawImage(context, frame, img1); 

// Draw the second image using difference blend more over the first 
CGContextSetBlendMode(context, kCGBlendModeDifference); 
CGContextDrawImage(context, frame, img2); 

// Fill the same rect with white color to invert 
// (still difference blend mode) 
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); 
CGContextFillRect(context, frame); 
+0

デビッドコードありがとうございましたが、すでにdiffブレンドは私からの解決策ではないと言いましたが、私は差分画像のより良い定義で質問を更新しました。実際には、2つの画像の差分画像は同じサイズの画像ですが、変更されていない透明に設定されています。差分画像は、2番目の画像からの色を持つdiffピクセルから構築されます – deimus

+1

したがって、基本的に違いがある場合は2番目の画像のマスクを使用しますか? –

+0

はい、正確です!任意のアイデアマスクを構築する方法? – deimus

関連する問題