专栏首页eguid开源技术分享javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印

javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/eguid_1/article/details/53259649

前言:

本章通过javaCV-openCV处理图像,其中javaCV部分负责摄像头抓取和Frame、Mat转换操作,openCV负责图像加载、图像保存以及 图像叠加、感兴趣区域和透明度处理。

1、实现的功能

(1)摄像头视频抓取

(2)视频帧Frame与Mat图像相互转换

(3)图像加载级图像保存

(4)图像叠加、图像感兴趣区、图像透明处理

(5)文字叠加、字体大小、粗度、颜色及平滑处理等

2、代码实现

// 转换器,用于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 point = new Point(10, 50);
		// 颜色,使用黄色
		Scalar scalar = new Scalar(0, 255, 255, 0);
		Frame frame = null;
		int index = 0;

		Mat logo = opencv_imgcodecs.imread("4ycfb.png");
		Mat mask = opencv_imgcodecs.imread("4ycfb.png", 0);
		
		opencv_imgproc.threshold(mask,mask,254,255,opencv_imgcodecs.IMWRITE_PNG_BILEVEL);
	    
		double alpha = 0.5;// 图像透明权重值,0-1之间
		while (cFrame.isShowing()) {
			if ((frame = grabber.grabFrame()) != null) {
				// 取一帧视频(图像),并转换为Mat
				Mat mat = converter.convertToMat(grabber.grabFrame());

				// 加文字水印,opencv_imgproc.putText(图片,水印文字,文字位置,字体,字体大小,字体颜色,字体粗度,平滑字体,是否翻转文字)
				opencv_imgproc.putText(mat, "eguid!", point, opencv_imgproc.CV_FONT_VECTOR0, 1.2, scalar, 1, 20, false);
				// 定义感兴趣区域(位置,logo图像大小)
				Mat ROI = mat.apply(new Rect(400, 350, logo.cols(), logo.rows()));

				opencv_core.addWeighted(ROI, alpha, logo, 1.0 - alpha, 0.0, ROI);
				// 把logo图像复制到感兴趣区域
//				 logo.copyTo(ROI, mask);
				// 显示图像到窗口
				cFrame.showImage(converter.convert(mat));
				if (index == 0) {
					// 保存第一帧图片到本地
					opencv_imgcodecs.imwrite("eguid.jpg", mat);
				}
				// 释放Mat资源
				ROI.release();
				ROI.close();
				mat.release();
				mat.close();
				Thread.sleep(40);
				index++;
			}

			index++;
		}
		// 关闭窗口
		cFrame.dispose();
		// 停止抓取器
		grabber.stop();
		// 释放资源
		logo.release();
		logo.close();
		mask.release();
		mask.close();
		scalar.close();
		point.close();

3、测试结果

左上角的eguid!是文字水印,右下角的是图片水印,中间是图片上传到csdn时添加的文字水印

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 嘘,我已经瞒着开发解锁APP日志文件抓取及分析啦!

    Dalvik Debug Monitor Service ( Dalvik调试监控服务) ,可视化的图形界面调试监控工具。不同等级log信息显示的颜色不同,使用...

    ITester软件测试小栈
  • 新技术加速隐私暴露,如何应对?(二)

    网络爬虫技术并不是一个新技术,最初是搜索引擎用来抓取散落在因特网上的海量网站,解析后为用户提供搜索服务的一种技术,本质上是模拟浏览器浏览网页的行为,用程序获取网...

    数据猿
  • 字体加密 | 字体加密初认识

    既然这么多的网站都采用了字体加密,那么它一定是一个有效的反爬手段,作为爬虫工程师我们应该如何应对呢?

    咸鱼学Python
  • SAS-一个关于specification与分析数据集的小工具

    今天小编要分享一段根据Specification文件自动加工分析数据集的小程序,可以实现自动修改分析数据集变量标签、变量顺序、观测排序、变量属性、检验是否有遗漏...

    Setup
  • 1.2.3 、Google Analytics参数配置与调优

    GA基础跟踪代码部署完之后并不是万事大吉的,还需要对其做一些配置和调优,参数配置与调优主要是在GTM上和GA上做一些配置,确保和提高数据的准确度,下面先介绍在G...

    GA小站
  • 爬虫篇 | 学习Selenium并使用Selenium模拟登录知乎

    最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.

    叫我龙总
  • 听说你碰到这种反爬就歇菜了?手把手教你秒杀它!

    上面的这段话对于没做过前端开发的朋友而言,看着可能会有点难懂,没关系,我们用个例子简单地演示一下。

    咸鱼学Python
  • 关于全部已知导致百度索引量下降的原因分析及解决方案

    索引量是流量的基础,索引量数据的每一个变动都拨动着站长敏感的神经,“索引量下降之后该如何着手分析”一直是各位讨论的热门话题。这次站长社区版主老吕又拔刀相助了,看...

    高级优化师
  • 网站优化之SEO优化三大禁忌

    看到很多不懂的网站优化的网站喜欢关键词堆积,认为关键词越多越好,恨不得写上百八十个关键词,把相关的搜索流量都揽过来。

    大脸猫
  • python 爬虫与反爬虫

    案例:雪球网 返回的就是403403 Forbidden. Your IP Address:xxx.xxx.xxx.xxx.但是当我们这样写:

    用户5760343

扫码关注云+社区

领取腾讯云代金券