How to Create a Watermark on an Image Using OpenCV Python?
Do you want to protect your images from being copied or claimed by others? A watermark is a great way to do that. In this tutorial, we will show you how to create a watermark on an image using OpenCV Python.
Setting up the Environment
Before we begin, let us make sure everything is set up correctly. We need to have OpenCV installed and running in our Python environment. If you don’t have it yet, you can install it using the following command:
pip install opencv-python
Once you have it installed, let’s import it into our Python script:
import cv2
Creating the Watermark
Now that we have set up our environment, let’s move on to creating our watermark. We will be using OpenCV to read the source image and write the watermark on it.
First, let us read the source image:
img = cv2.imread('image.jpg')
Next, we should resize the watermark image to fit the source image. Let us assume that the size of the source image is width_s
by height_s
, and the size of the watermark image is width_w
by height_w
. We can resize the watermark image using the following code:
scale_factor = 0.6 # Decrease the scale factor to increase the size of the watermark, and vice-versa.
watermark = cv2.imread('watermark.jpg')
watermark = cv2.resize(watermark, (int(scale_factor*width_s), int(scale_factor*height_s)))
Note that we have used a scaling factor of 0.6
to reduce the size of the watermark by 40%
. You can adjust this factor to your liking.
Next, we need to merge the images. We can do this by calculating the weighted sum of the two images. Here is the code to do that:
alpha = 0.5 # Change the alpha value to adjust the transparency of the watermark.
beta = 1 - alpha
dst = cv2.addWeighted(img[int(height_s/2-height_w/2): int(height_s/2+height_w/2), int(width_s/2-width_w/2): int(width_s/2+width_w/2)], alpha, watermark, beta, 0)
img[int(height_s/2-height_w/2): int(height_s/2+height_w/2), int(width_s/2-width_w/2): int(width_s/2+width_w/2)] = dst
In this code, we have set the alpha value to 0.5
, which means the watermark will be half transparent. You can adjust this value to your preference.
The above code also crops the (height_w, width_w)
sized area from the center of the source image and merges it with the watermark. If you want the watermark to cover the entire source image, replace the cropping code with the following:
watermark = cv2.resize(watermark, (width_s, height_s))
alpha = 0.3
beta = 1 - alpha
dst = cv2.addWeighted(img, alpha, watermark, beta, 0)
img = dst
Displaying the Resulting Image
Finally, let us display the resulting image. We can do this using the following code:
cv2.imshow('Watermarked Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
This code displays the resulting image in a window titled Watermarked Image
.
Sample Code
Here is the complete code to create a watermark on an image:
import cv2
img = cv2.imread('image.jpg')
width_s, height_s, _ = img.shape
scale_factor = 0.6
watermark = cv2.imread('watermark.jpg')
width_w, height_w, _ = watermark.shape
watermark = cv2.resize(watermark, (int(scale_factor*width_s), int(scale_factor*height_s)))
alpha = 0.5
beta = 1 - alpha
dst = cv2.addWeighted(img[int(height_s/2-height_w/2): int(height_s/2+height_w/2), int(width_s/2-width_w/2): int(width_s/2+width_w/2)], alpha, watermark, beta, 0)
img[int(height_s/2-height_w/2): int(height_s/2+height_w/2), int(width_s/2-width_w/2): int(width_s/2+width_w/2)] = dst
cv2.imshow('Watermarked Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Conclusion
In this tutorial, we have shown youhow to create a watermark on an image using OpenCV Python. By following the above steps, you can easily create a watermark on your images and protect them from being copied or claimed by others. You can experiment with different values of scaling factor and alpha to adjust the size and transparency of the watermark to your liking. We hope you find this tutorial helpful.