给我写一个用python自动检测水印的代码
时间: 2024-03-07 21:46:48 浏览: 212
水印代码
3星 · 编辑精心推荐
好的,以下是一个简单的用 Python 自动检测水印的代码,可以检测常见的图片水印和文字水印:
```python
import cv2
import numpy as np
def detect_watermark(img_path):
img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)[1]
# 执行开运算,去除噪点
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
# 寻找轮廓
contours, hierarchy = cv2.findContours(opening.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓,检测水印
for c in contours:
# 计算轮廓面积和周长
area = cv2.contourArea(c)
perimeter = cv2.arcLength(c, True)
# 计算轮廓的矩形边界框
x,y,w,h = cv2.boundingRect(c)
# 判断水印类型
if area < 500 or area > 5000:
continue
if perimeter < 100 or perimeter > 300:
continue
ratio = w / float(h)
if ratio < 0.2 or ratio > 5:
continue
# 标记水印位置
cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2)
# 显示结果
cv2.imshow("Result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
detect_watermark("test.jpg")
```
解释:
1. 使用 OpenCV 库读取输入图片,将其转换为灰度图像。
2. 对灰度图像进行二值化处理,提取出图像中的白色区域。
3. 对二值化图像进行开运算,去除噪点。
4. 使用 findContours 函数寻找图像中的所有轮廓。
5. 遍历所有轮廓,计算其面积、周长和矩形边界框。
6. 使用一些简单的条件判断来确定是否为水印,比如面积、周长和宽高比等。
7. 如果符合条件,则在原图上标记水印位置。
8. 显示结果。
注意:这只是一个简单的示例代码,不一定能够完全检测出所有水印。如果需要更加准确的检测结果,可能需要使用更复杂的算法和模型。
阅读全文