python + opencv实现简单的文字水印

发布于:2025-07-01 ⋅ 阅读:(15) ⋅ 点赞:(0)

原理:

加水印

1 将8位像素的最低位清零 

2 创建一个0矩阵,并在上面写字,然后二值化,并将255值设置为0.这一步可以简化一下,

例如:

dst[dst == 255] = 1

3 将生成的01图火上最低位被清零的图片

取出水印

1 将图片和1矩阵做与运算

2 将计算结果中的1设置为255

dst[dst == 1] = 255

OK显示即可

第一版测试

import cv2 as cv
import numpy as np

# 读取图像
img = cv.imread('jk.jpg', cv.IMREAD_GRAYSCALE)

# 创建一个黑色背景的图像
myimg = np.zeros(img.shape, np.uint8)

# 在黑色背景上添加文本
cv.putText(myimg, 'Hello', (100, 100), cv.FONT_HERSHEY_SIMPLEX, 2, [255], thickness=3)

# 显示带有文本的图像
cv.imshow('myimg', myimg)

# 对 myimg 进行阈值处理以提取文字
ret, dst = cv.threshold(myimg, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
cv.imshow('Extracted dst', dst)
print(ret)
dst[dst > 0] = 1
dst[dst == 1] = 255
cv.imshow('Extracted dst 2', dst)
dst[dst == 255] = 1
print(dst[100:120,100:120])
# 显示提取出的文字
cv.imshow('Extracted Text', dst)
img = img[:,:] & 254

img = cv.bitwise_or(img, dst)
cv.imshow('new image', img)

newword =img & 1
ret, dst = cv.threshold(newword, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
cv.imshow('newword dst', dst)

cv.waitKey(0)
cv.destroyAllWindows()

执行结果:

第二版测试

import cv2 as cv
import numpy as np

# 读取图像
img = cv.imread('jk.jpg', cv.IMREAD_GRAYSCALE)
# 创建一个黑色背景的图像
word_img = np.zeros(img.shape, np.uint8)
# 在黑色背景上添加文本
cv.putText(word_img, 'Hello', (100, 100), cv.FONT_HERSHEY_SIMPLEX, 2, [1], thickness=3)
img = img & 254
img = cv.bitwise_or(img, word_img)
cv.imshow('new image', img)
newword =img & 1
newword[newword == 1] = 255
cv.imshow('newword dst', newword)

cv.waitKey(0)
cv.destroyAllWindows()

 

第三版测试,转成彩色的

import cv2 as cv
import numpy as np

# 读取图像
img = cv.imread('jk.jpg', cv.IMREAD_GRAYSCALE)
# 创建一个黑色背景的图像
word_img = np.zeros(img.shape, np.uint8)
# 在黑色背景上添加文本
cv.putText(word_img, 'Hello', (100, 100), cv.FONT_HERSHEY_SIMPLEX, 2, [1], thickness=3)
img = img & 254
img = cv.bitwise_or(img, word_img)
cv.imshow('new image', img)
newword =img & 1
newword = cv.cvtColor(newword, cv.COLOR_GRAY2BGR)
mask = np.all(newword == 1, axis=2)
newword[mask] = [255, 255, 0]

cv.imshow('newword dst', newword)

cv.waitKey(0)
cv.destroyAllWindows()

小结


网站公告

今日签到

点亮在社区的每一天
去签到