ImageMagick apply blur to photo using a black and white mask
Recently, we were trying to apply blurriness to the frames of a video using a custom mask. Our needs would not be short of describing using geometric shapes, so we created the following image (blur.png
) as a template for the blurring effect:
The above mask applies a blur effect to all black pixels and leaves all white pixels in the original image intact.
The command that we used was the following:
convert "${FILE}" -mask blur.png -blur 0x8 +mask "blur/${FILE}";
This command creates a new copy of the input file and places it into the folder named blur, so be sure to make the folder before using the above command (e.g., using the command mkdir blur
).
Parameters and other information
-mask
this flag assosiates the filename that is given with the mask of the command.-blur
defines the geometry that is used reduce image noise and reduce detail levels.
To increase the blurriness you can increase the number in this variable0x8
.+mask
The ‘plus’ form of the operator+mask
removes the mask from the input image.
The version of convert that we used for this example was the following:
Version: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org Copyright: © 1999-2019 ImageMagick Studio LLC
Below is a result frame from a video that we processed:
Additional material
To apply it to all video frames in the folder, we used the following command to make our life easier:
find . -maxdepth 1 -type f -name "*.ppm" -exec bash -c 'FILE="$1"; convert "${FILE}" -mask blur.png -blur 0x8 +mask "blur/${FILE}";' _ '{}' \;
The above command finds all frames in the current folder and executes the convert command described above. Since FFmpeg names the frames as PPM, we used that to filter our search. The blur folder is in the same folder as the original images. To avoid processing the pictures in that folder again, we defined the -maxdepth
parameter in find that prevents it from navigating into child folders of the one we are working in.