【发布时间】:2021-11-11 00:52:10
【问题描述】:
我是 OpenCV 的新手, 我很乐意帮助我
我有一个像这样的透明水印图片
我想用 python OpenCV 在多张图片的左下角添加水印
每张图片都有不同的尺寸
在放之前我想调整水印的大小以适应图像的大小,徽标不应缩小或放大
类似这样的图片:
这是我的代码:
import cv2
img1 = cv2.imread('my_image.png')
img2 = cv2.imread('my_watermark.png')
h, w = img1.shape[:2]
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols]
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 220, 255, cv2.THRESH_BINARY_INV)
mask_inv = cv2.bitwise_not(mask)
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0: cols] = dst
cv2.imwrite('imglogo.png', img1)
但是这段代码有两个问题
首先,水印位于图片的右上角
其次,水印失去透明度
图像变成这样
我试试这个:
image = cv2.imread('my_image.png')
watermark = cv2.imread('my_watermark.png', cv2.IMREAD_UNCHANGED)
(wH, wW) = watermark.shape[:2]
weight = 1 - watermark[:, :, 3] / 255
num1 = 1250
num2 = 50
image[num1:num1 + wH, num2:num2 + wW, 0] = np.multiply(image[num1:num1 + wH, num2:num2 + wW, 0], weight).astype(np.uint8)
image[num1:num1 + wH, num2:num2 + wW, 1] = np.multiply(image[num1:num1 + wH, num2:num2 + wW, 1], weight).astype(np.uint8)
image[num1:num1 + wH, num2:num2 + wW, 2] = np.multiply(image[num1:num1 + wH, num2:num2 + wW, 2], weight).astype(np.uint8)
output = cv2.addWeighted(image[num1:num1 + wH, num2:num2 + wW], 1, watermark[:, :, 0:3], 1, 1)
image[num1:num1 + wH, num2:num2 + wW] = output
cv2.imwrite("watermark3.png", image)
但在不同的图像中,每张图像的大小都会发生变化
所以,num1 和 num2 必须改变
我有点困惑, 如何在多张图片的左下角添加水印?
【问题讨论】:
-
我在此处stackoverflow.com/questions/49070242/… 的回答中的一些代码可能有助于从目录中读取多个图像并获取每个图像的宽度/高度(这是您的 num1/num2. num1 将是图像的高度减去(以像素为单位的水印高度+您想要的任何边框))。不过,您需要对其进行自定义。
标签: python opencv image-processing opencv-python