java给视频添加水印_javaCV视频添加水印

本文介绍如何使用JavaCV库给视频添加水印,包括从视频中获取图像帧、添加文字和图片水印的步骤,并提供了详细的代码实现。通过OpenCVFrameGrabber抓取视频帧,然后利用Java2DFrameConverter将帧转换为BufferedImage,再添加水印并显示在窗口,同时保存第一帧为图片。

想要给视频添加水印,需要从视频中取出图像帧,给图像帧添加文字、图片水印即可

首先需要取到BufferedImage,通过这个就可以用Java的方式添加水印

从grabber中获取BufferedImage:

//获取BufferedImage可以给图像帧添加水印

Java2DFrameConverter javaconverter=new Java2DFrameConverter();

BufferedImage buffImg=javaconverter.convert(grabber.grab());

获取到了BufferedImage就可以开始给视频帧添加文字或者图片水印

用java添加水印:

(1)摄像头视频抓取

(2)Frame和Mat相互转换

(3)给图像添加文字

(4)把添加水印文字的图像转换为Frame并显示到窗口

(5)保存图片

代码实现

运行后会出现一个窗口,窗口中会实时显示日期和eguid正向和eguid翻转字符,关闭窗口相当于结束程序运行。

该程序会自动保存第一帧图像到本地eguid.jpg文件。

// 转换器,用于Frame/Mat/IplImage相互转换

OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();

// 使用OpenCV抓取本机摄像头,摄像头设备号默认0

OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);

// 开启抓取器

grabber.start();

//做好自己!--eguid版权所有,转载请注明出处!

CanvasFrame cFrame = new CanvasFrame("做好自己!--eguid!", CanvasFrame.getDefaultGamma() / grabber.getGamma());

cFrame.setAlwaysOnTop(true);

cFrame.setVisible(true);

// 水印文字位置

Point point1 = new Point(10, 50);

Point point2 = new Point(200, 200);

Point point3 = new Point(200, 240);

// 颜色

Scalar scalar1 = new Scalar(0, 255, 255, 0);

Scalar scalar2 = new Scalar(255, 0, 0, 0);

Frame frame = null;

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

int index = 0;

// 关闭窗口即停止运行

while (cFrame.isShowing()) {

if ((frame = grabber.grabFrame()) != null) {

// 取一帧视频(图像),并转换为Mat

Mat mat = converter.convertToMat(grabber.grabFrame());

// 加文字水印,opencv_imgproc.putText(图片,水印文字,文字位置,字体,字体大小,字体颜色,字体粗度,文字反锯齿,是否翻转文字)

opencv_imgproc.putText(mat, "eguid!", point2, opencv_imgproc.CV_FONT_VECTOR0, 2.2, scalar2, 1, 0,

false);

// 翻转字体,文字平滑处理(即反锯齿)

opencv_imgproc.putText(mat, "eguid!", point3, opencv_imgproc.CV_FONT_VECTOR0, 2.2, scalar2, 1, 20,

true);

opencv_imgproc.putText(mat, sdf.format(new Date()), point1, opencv_imgproc.CV_FONT_ITALIC, 0.8, scalar1,

2, 20, false);

// 在窗口显示处理后的图像,Frame frame=converter.convert(mat);

cFrame.showImage(converter.convert(mat));

if (index == 0) {

// 保存第一帧图片到本地

opencv_imgcodecs.imwrite("eguid.jpg", mat);

}

// 释放Mat资源

mat.release();

mat.close();

}

Thread.sleep(40);

index++;

}

cFrame.dispose();// 销毁窗口

grabber.stop();// 停止抓取器

// 手动释放资源

scalar1.close();

scalar2.close();

point1.close();

point2.close();

point3.close();

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值