请用OpenCV帮我写段给图片加水印的代码?
时间: 2023-08-04 07:09:35 浏览: 271
好的,以下是一个使用OpenCV给图片加水印的示例代码:
```python
import cv2
# 加载图片
img = cv2.imread("input.jpg")
# 设置水印文本
text = "Watermark"
# 设置水印位置和字体
pos = (50, 50) # 水印位置
font = cv2.FONT_HERSHEY_SIMPLEX # 字体
# 添加水印
cv2.putText(img, text, pos, font, 1, (0, 0, 255), 2, cv2.LINE_AA)
# 保存图片
cv2.imwrite("output.jpg", img)
```
在这个示例中,我们首先使用OpenCV加载输入图片。然后,我们设置水印文本、水印位置和字体。接下来,我们使用`cv2.putText()`函数将水印添加到图片中。最后,我们使用`cv2.imwrite()`函数保存输出图片。请注意,这只是一个简单的示例,实际应用中可能需要更复杂的操作,例如调整水印的透明度或旋转角度等。
相关问题
android opencv 给图片加文字水印
在Android上使用OpenCV给图片添加文字水印可以通过以下步骤实现:
1. 导入OpenCV库:首先需要在Android项目中导入OpenCV库文件,可以从OpenCV官方网站下载或者使用Gradle依赖方式导入。
2. 图片加载:使用Android提供的方式加载需要加水印的图片,例如使用BitmapFactory.decodeResource()方法加载本地资源图片,或者使用第三方库加载网络图片。
3. 创建OpenCV Mat对象:使用OpenCV库提供的Mat类,将加载的图片转为Mat对象用于后续操作。可以使用Imgcodecs.imread()方法将Bitmap转为Mat。
4. 添加文字水印:使用OpenCV提供的绘制文本的方法将文字水印添加到Mat对象中。可以使用Imgproc.putText()方法指定水印的位置、文本内容、颜色、字体大小等参数。
5. 转换为Bitmap:将带有水印的Mat对象转换为Bitmap对象。可以使用Bitmap.createBitmap()方法将Mat转为Bitmap。
6. 保存图片:可以选择将带有水印的Bitmap保存到本地存储器或者上传到服务器。使用Bitmap.compress()方法可以将Bitmap对象转为文件输出流,然后保存到指定路径。
需要注意的是,在添加文字水印之前,可能需要对图片进行一些预处理,例如调整大小、旋转、裁剪等操作,可以使用OpenCV提供的相关方法。
以上是使用OpenCV在Android上给图片加文字水印的简要步骤说明,具体实现可以参考OpenCV官方文档和相关示例代码。
opencv视频加水印
要在OpenCV视频中添加水印,你需要先加载视频,然后在每帧上添加水印,最后保存输出视频。下面是一个示例代码:
```python
import cv2
# 加载视频
video = cv2.VideoCapture('input.mp4')
# 获取视频参数
fps = int(video.get(cv2.CAP_PROP_FPS))
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建输出视频对象
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, fps, (width, height))
# 加载水印
watermark = cv2.imread('watermark.png', cv2.IMREAD_UNCHANGED)
while True:
# 读取一帧
ret, frame = video.read()
if ret:
# 在帧上添加水印
overlay = cv2.resize(watermark, (frame.shape[1] // 5, frame.shape[0] // 5))
x, y = frame.shape[1] - overlay.shape[1], frame.shape[0] - overlay.shape[0]
alpha_mask = overlay[:, :, 3] / 255.0
alpha = cv2.merge((alpha_mask, alpha_mask, alpha_mask))
blended = cv2.convertScaleAbs(frame[y:y+overlay.shape[0], x:x+overlay.shape[1]] * (1 - alpha) + overlay[:, :, 0:3] * alpha)
frame[y:y+overlay.shape[0], x:x+overlay.shape[1]] = blended
# 写入输出视频
out.write(frame)
# 显示帧
cv2.imshow('frame', frame)
# 按下 q 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 释放资源
video.release()
out.release()
cv2.destroyAllWindows()
```
注意,上面的代码假设你的水印是一个带 alpha 通道的 PNG 图像。如果你的水印不带 alpha 通道,你需要使用 `cv2.addWeighted()` 方法将它与帧混合。
阅读全文