博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印...
阅读量:4310 次
发布时间:2019-06-06

本文共 2143 字,大约阅读时间需要 7 分钟。

 

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();

支持eguid原创

 

3、测试结果

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

 

 

 

 

 

转载于:https://www.cnblogs.com/eguid/p/10195592.html

你可能感兴趣的文章
Java Timer触发定时器
查看>>
Page Object设计模式
查看>>
程序的基础知识
查看>>
在VIM中使用GDB调试 – 使用vimgdb
查看>>
python爬虫---从零开始(五)pyQuery库
查看>>
POJ2236(KB5-A)
查看>>
Centos MySQL数据库迁移详细步骤
查看>>
2初出茅庐--初级篇2.1
查看>>
新建 WinCE7.0 下的 Silverlight 工程
查看>>
腾讯的张小龙是一个怎样的人?
查看>>
jxl写入excel实现数据导出功能
查看>>
linux文件目录类命令|--cp指令
查看>>
.net MVC 404错误解决方法
查看>>
linux系统目录结构
查看>>
git
查看>>
btn按钮之间事件相互调用
查看>>
Entity Framework 4.3.1 级联删除
查看>>
codevs 1163:访问艺术馆
查看>>
冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱
查看>>
并查集
查看>>