Я пытаюсь сделать водяные знаки на изображении в процентах от ширины изображения с водяными знаками, и оно частично работает.
Вот так водяные знаки выглядят в веб-браузере и imshow()
из opencv:
Как видите, убрана черная рамка ...
В моем коде:
w
обозначает водяной знак wH
, wW
, wD
обозначает водяной знак Высота, ширина и глубина соответственно i
обозначает изображение iH
, iW
, iD
обозначает изображение Высота, Ширина и Глубина соответственно nwW
обозначает новый водяной знак Ширина nwH
обозначает новый водяной знак Высота nwD
обозначает новые размеры водяного знака
Фактический код:
import cv2
import imutils
import numpy as np
# Reading the watermark
w = cv2.imread('input/watermark.png', cv2.IMREAD_UNCHANGED)
# If not doing this hack the watermark loses the alpha channel
(B, G, R, A) = cv2.split(w)
B = cv2.bitwise_and(B, B, mask=A)
G = cv2.bitwise_and(G, G, mask=A)
R = cv2.bitwise_and(R, R, mask=A)
w = cv2.merge([B, G, R, A])
# Getting the width, height, depth for the watermark
(wH, wW, wD) = w.shape
# Reading the image
i = cv2.imread('input/image1920.png')
# Getting the width, height, depth for the image
(iH, iW, iD) = i.shape
# I've read that I had to add a new dimension (I don't know why)
i = np.dstack([i, np.ones((iH, wW), dtype="uint8") * 255])
# 80% of the image Width should be the new widt for the Watermark
nwW = 80 * int(iW) / 100
# Calculating the ratio
ratio = nwW / iW
# Calculating the new watermakr Height based on the ratio
nwH = wH * ratio
# Tuple with the new watermak dimensions
nwD = (int(nwW), int(nwH))
# Resizing the watermark to its new dimensions
resized_w = cv2.resize(w, nwD)
# Creating an overlay
overlay = np.zeros((iH, iW, 4), dtype="uint8")
overlay[iH - int(nwH) - 10:iH - 10, iW - int(nwW) - 10:iW - 10] = resized_w
# Blending the two images
output = i.copy()
cv2.addWeighted(overlay, 1, output, 1, 0, output)
# Showing the results
cv2.imshow("watermark test", resized_w)
cv2.waitKey(0)