Is this possible with ImageMagick:
I have two images, the first is only the background, the second includes my subject in the foreground.
On a pixel by pixel basis, if the two pixels have the same value can I turn the pixel transparent in the second or a resultant image?
I have full control in making the original images - lighting, focus, f stop, camera placement, exposure - with adequate physical and lighting separation between the background and foreground to avoid interactions.
What I do not have is a single pixel value for all the pixels in the background (an easy solution exists for this case), and providing a range, or a fuzz factor, unacceptably degrades the foreground subject (otherwise another easy solution.)
I understand I can work harder at controlling the uniformity of the background. I would like to know if I can make the computer work harder instead.
Bill
two images, if pixel in 2nd = 1st then make it transparent
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: two images, if pixel in 2nd = 1st then make it transparent
If the background and the foreground are the same size, then here is one way.
I have a white background and the logo: (internal IM image) that has a lot of white in it. I will make the white which matches the background in the resulting image of the logo become transparent.
convert \( -size 640x480 xc:white \) logo: \
\( -clone 0 -clone 1 -compose difference -composite -threshold 0 \) \
-delete 0 -compose copy_opacity -composite logo_with_white_transparent.png
This gets the difference image and thresholds it and put is as the alpha channel for the logo image.
I have a white background and the logo: (internal IM image) that has a lot of white in it. I will make the white which matches the background in the resulting image of the logo become transparent.
convert \( -size 640x480 xc:white \) logo: \
\( -clone 0 -clone 1 -compose difference -composite -threshold 0 \) \
-delete 0 -compose copy_opacity -composite logo_with_white_transparent.png
This gets the difference image and thresholds it and put is as the alpha channel for the logo image.
- anthony
- Posts: 8883
- Joined: 2004-05-31T19:27:03-07:00
- Authentication code: 8675308
- Location: Brisbane, Australia
Re: two images, if pixel in 2nd = 1st then make it transparent
This is the compose operator ChangeMask! That is exactly what it does.
Though you can specify a -fuzz factor to also allow 'near equal' colors too. See examples at...
http://www.imagemagick.org/Usage/compose/#changemask
It was developed to allow me to create the GIF animation transparency optimization method -layers OptimizeTransparency
http://www.imagemagick.org/Usage/anim_opt/#opt_trans
Though you can specify a -fuzz factor to also allow 'near equal' colors too. See examples at...
http://www.imagemagick.org/Usage/compose/#changemask
It was developed to allow me to create the GIF animation transparency optimization method -layers OptimizeTransparency
http://www.imagemagick.org/Usage/anim_opt/#opt_trans
Anthony Thyssen -- Webmaster for ImageMagick Example Pages
https://imagemagick.org/Usage/
https://imagemagick.org/Usage/
Re: two images, if pixel in 2nd = 1st then make it transparent
Thank you Anthony and fmw42. I will try these approaches - I agree, they will work.
While I spent many hours in the documentation - even reading some of the above referenced material - the answer did not occur to me. Learning what to do - and what not to do - requires far more than learning how to do something. Without the sharing of knowledge that experience yields this would have been - at least for me - a far more difficult problem to solve, possibly unsolvable, given resource constraints and the uncertainty that the goal is obtainable. Again, thank you.
Bill
While I spent many hours in the documentation - even reading some of the above referenced material - the answer did not occur to me. Learning what to do - and what not to do - requires far more than learning how to do something. Without the sharing of knowledge that experience yields this would have been - at least for me - a far more difficult problem to solve, possibly unsolvable, given resource constraints and the uncertainty that the goal is obtainable. Again, thank you.
Bill