OpenCV Watermark сохраняет соотношение сторон, не давая одинаковых результатов ввода / вывода - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь сделать водяные знаки на изображении в процентах от ширины изображения с водяными знаками, и оно частично работает.

Вот так водяные знаки выглядят в веб-браузере и imshow()из opencv: enter image description here

Как видите, убрана черная рамка ...

В моем коде:

  • 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...