Добавление водяных знаков к изображениям с помощью Python и OpenCV

задняя часть Python OpenCV
Добавление водяных знаков к изображениям с помощью Python и OpenCV

Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.

В этой статье я расскажу вам о водяных знаках на изображениях с использованием Python и OpenCV. Водяные знаки намеренно оставляют текст/логотип на изображениях, и многие блоггеры используют водяные знаки для защиты авторских прав на изображения. Используя водяные знаки, мы можем гарантировать, что владельцем изображения является тот, кто напечатал водяной знак на изображении.

Изображение перед водяным знаком:水印前的图片логотип.png:logo.png

🌌 Шаг 1: Импортируйте OpenCV и прочитайте логотип и изображение, на которое нужно нанести водяной знак.

# 使用 OpenCV 导入 cv2 的水印图像
import cv2

# 导入我们将要使用的logo
logo = cv2.imread("logo.png")

# 导入我们要应用水印的图像
img = cv2.imread("haiyong.png")

💨 Шаг 2: Рассчитайте высоту и ширину двух изображений.

Рассчитайте высоту и ширину обоих изображений и сохраните их в других переменных. Нам нужно рассчитать ширину и высоту, потому что мы хотим разместить водяной знак где-то на изображении, для этого нам просто нужно знать правильную ширину и высоту логотипа и изображения.

# 计算logo的尺寸高度和宽度
h_logo, w_logo, _ = logo.shape

# 图像的高度和宽度
h_img, w_img, _ = img.shape

Здесь мы используем функцию shape из OpenCV, которая возвращает кортеж высоты и ширины изображения.

🚀 Шаг 3: Поместите водяной знак в центр изображения.

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

# 计算中心计算中心的坐标,我们将在其中放置水印
center_y = int(h_img/2)
center_x = int(w_img/2)

# 从上、下、右、左计算
top_y = center_y - int(h_logo/2)
bottom_y = top_y + h_logo
right_x = left_x + w_logo
left_x = center_x - int(w_logo/2)

🍺 Шаг 4: Используйте функцию addWeighted в OpenCV

Чтобы добавить водяной знак к изображению, мы будем использовать функцию addWeighted из OpenCV. Во-первых, мы указываем место назначения, где мы хотим разместить водяной знак, а затем передаем это место назначения функции addWeighted с изображением и логотипом.

грамматика:cv2.addWeighted(source1, alpha, source2, beta, gamma)

В нашем случае source1 — это изображение, на которое мы хотим поместить логотип, alpha — это непрозрачность логотипа, source2 — это сам логотип, соответственно мы установим beta на 1, а alpha и gamma непрозрачности на 1 и 0. соответственно.

# 给图片添加水印
destination = img[top_y:bottom_y, left_x:right_x]
result = cv2.addWeighted(destination, 1, logo, 1, 0)

🎨 Шаг 5: Отобразите результат и сохраните вывод

После этого мы просто отображаем результат и сохраняем вывод. Чтобы отобразить вывод нашей функции imshow и записать/сохранить изображение, мы используем функцию imwrite в обеих функциях, сначала мы должны указать имя файла в качестве аргумента, а затем сам файл. cv2.waitKey(0) используется для ожидания, пока пользователь не нажмет клавишу Esc, после чего функция cv2.destroyAllWindows закроет окно.

# displaying and saving image
img[top_y:bottom_y, left_x:right_x] = result
cv2.imwrite("watermarked.jpg", img)
cv2.imshow("Watermarked Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

🛹 Вот полная реализация:

# 使用 OpenCV 导入 cv2 的水印图像
import cv2

# 导入我们将要使用的logo
logo = cv2.imread("logo.png")

# 导入我们要应用水印的图像
img = cv2.imread("haiyong.png")

# 计算logo的尺寸高度和宽度
h_logo, w_logo, _ = logo.shape

# 图像的高度和宽度
h_img, w_img, _ = img.shape

# 计算中心计算中心的坐标,我们将在其中放置水印
center_y = int(h_img/2)
center_x = int(w_img/2)

# 从上、下、右、左计算
top_y = center_y - int(h_logo/2)
left_x = center_x - int(w_logo/2)
bottom_y = top_y + h_logo
right_x = left_x + w_logo

# 给图片添加水印
destination = img[top_y:bottom_y, left_x:right_x]
result = cv2.addWeighted(destination, 1, logo, 1, 0)

# 显示和保存图像
img[top_y:bottom_y, left_x:right_x] = result
cv2.imwrite("watermarked.jpg", img)
cv2.imshow("Watermarked Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

вывод: 在这里插入图片描述

Я давно веду блог о технологиях, в основном через самородки, и вот одно из моих изображений с водяными знаками с использованием Python и OpenCV. Я люблю делиться технологиями и радостью через статьи. Вы можете посетить мой блог:Талант /user/204034…Чтобы получить больше информации. Надеюсь, вам это понравится! 😊

💌 Все желающие могут оставлять комментарии и предложения в комментариях! 💌

Официальный представитель Наггетс будет вПроект «Звезда раскопок»После мероприятия в комментариях будет разыграно 100 штук Наггетсов, подробности розыгрыша читайте в статье о мероприятии.