欢迎大家积极开心的加入讨论群
javaCV图像处理系列:

前言:

本章通过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时添加的文字水印






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

  1. javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) javaCV图像处理系列: javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置. ...

  2. 文字和图片居中的HTML代码怎么写?

    HTML 代码 ,怎么将文本/ 图片居中?这是在W3Cschool的编程问答中前端♌蕾儿提出的问题.网友施主同西否给出了详细的解答. html文字居中和html图片居中方法代码,通过在html中实现文 ...

  3. Python+OpenCV图像处理(三)—— Numpy数组操作图片

    一.改变图片每个像素点每个通道的灰度值 (一) 代码如下: #遍历访问图片每个像素点,并修改相应的RGB import cv2 as cv def access_pixels(image): prin ...

  4. Python+OpenCV图像处理(一)

    Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...

  5. Python+OpenCV图像处理(一)——读取显示一张图片

    先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...

  6. 使用OpenCV通过摄像头捕获实时视频并探测人脸

    在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,视频可以看作是一帧一帧的图片,因此图片操作其实是视频操作的基础,这篇手记就来讲讲OpenCV中的视频操作,并实现一个用笔记本 ...

  7. OpenCV图像处理以及人脸识别

    OpenCV基础 OpenCV是一个开源的计算机视觉库.提供了很多图像处理常用的工具 批注:本文所有图片数据都在我的GitHub仓库 读取图片并显示 import numpy as np import ...

  8. 《OpenCV图像处理编程实例》

    <OpenCV图像处理编程实例>例程复现 随书代码下载:http://www.broadview.com.cn/28573 总结+遇到的issue解决: 第一章 初识OpenCV 1.VS ...

  9. OpenCV图像处理学习笔记-Day1

    OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...

随机推荐

  1. JS模式--状态模式(状态机)

    下面的状态机选择通过Function.prototype.call方法直接把请求委托给某个字面量对象来执行. var light = function () { this.currstate = FS ...

  2. 杜教筛 && bzoj3944 Sum

    Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用空格分隔的数ans1,ans ...

  3. JavaScript中var变量引用function与直接声明function

    今天在h5开发app的过程中遇到了一个js问题,function的执行问题 在js中声明函数function有这两种方法 var A=function(){...} 或者 function A(){. ...

  4. iOS-工程和工作空间、静态库和框架之间的关系

    使用Xcode创建的工程Project是单独分开的,如果想要几个工程同时存在,可以通过创建工作空间Workspace.工作空间是对各工程的集合,工程文件名的后缀为.xcodeproj,工作空间文件名的 ...

  5. Vue H5 History 部署IIS上404问题

    背景简介 vue使用vue-router时,默认的地址并不美观,以#进行分割,例如:http://www.xxx.com/#/main. 为了访问地址能像正常的url一样,例如:http://www. ...

  6. 从foreach语句枚举元素看数组

    在foreach语句中使用枚举,可以迭代数组或集合中的元素,且无须知道集合中的元素的个数.如图显示了调用foreach方法的客户端和集合之间的关系.数组或集合实现带GetEnumerator()方法的 ...

  7. 前端模块化——seaJS

    1.seaJS手记 一:Bower获取 要安装bower Npm install -g bower Bower install seajs 二:Use方法是整个项目的入口方法,通常一个项目中只调用一次 ...

  8. [笔记]机器学习(Machine Learning) - 01.线性回归(Linear Regression)

    线性回归属于回归问题.对于回归问题,解决流程为: 给定数据集中每个样本及其正确答案,选择一个模型函数h(hypothesis,假设),并为h找到适应数据的(未必是全局)最优解,即找出最优解下的h的参数 ...

  9. linux三剑客之sed命令

    一.前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令 ...

  10. SpringMVC——DispatcherServlet的IoC容器(Web应用的IoC容器的子容器)创建过程

    在上一篇<Spring--Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)>中说到了Web应用中的IoC容器创建过程.这一篇主要讲Sprin ...