添加文字水印 不是图片水印
时间: 2023-08-19 16:31:20 浏览: 102
添加文字水印
若要添加文字水印,你可以使用JavaCV中的OpenCV库中的putText函数将文本写入视频帧,然后将水印帧与视频帧混合。以下是一个示例代码:
```java
import org.bytedeco.javacv.*;
import org.bytedeco.opencv.opencv_core.*;
import java.io.*;
public class AddWatermark {
public static void main(String[] args) throws Exception {
//加载视频文件
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("input.mp4");
grabber.start();
//获取视频宽和高
int width = grabber.getImageWidth();
int height = grabber.getImageHeight();
//创建OpenCV的Mat对象来读取水印图片
Mat watermark = new Mat(height, width, CV_8UC3, new Scalar(0, 0, 0));
//设置文本字体、大小、颜色等属性
Scalar color = new Scalar(255, 255, 255);
int fontFace = FONT_HERSHEY_SIMPLEX;
double fontScale = 1.5;
int thickness = 2;
//在水印图片中写入文本
putText(watermark, "Watermark Text", new Point(width/4, height/2), fontFace, fontScale, color, thickness, LINE_AA, false);
//一帧一帧地读取视频
Frame frame = null;
while ((frame = grabber.grabFrame()) != null) {
//将JavaCV的Frame对象转换成OpenCV的Mat对象
Mat matFrame = converterToMat(frame);
//将水印图片与视频帧混合
addWeighted(matFrame, 1.0, watermark, 0.5, 0.0, matFrame);
//将OpenCV的Mat对象转换成JavaCV的Frame对象
frame = converterToFrame(matFrame, frame.imageWidth, frame.imageHeight);
//写入输出视频文件
recorder.record(frame);
}
grabber.stop();
recorder.stop();
}
//将JavaCV的Frame对象转换成OpenCV的Mat对象
public static Mat converterToMat(Frame frame) {
OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
return converter.convert(frame);
}
//将OpenCV的Mat对象转换成JavaCV的Frame对象
public static Frame converterToFrame(Mat mat, int width, int height) {
OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
Frame frame = converter.convert(mat);
frame.imageWidth = width;
frame.imageHeight = height;
return frame;
}
}
```
在上面的代码中,我们创建了一个黑色的OpenCV Mat对象作为水印,并在其上使用putText函数将文本写入。然后,我们将水印帧与视频帧混合。最后,我们将处理后的视频帧写入输出视频文件。你可以根据需要更改文本的字体、大小、颜色和位置等属性。
阅读全文