javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
2016-11-21 16:20
1551 查看
javaCV图像处理系列:
一、javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
二、javaCV图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制
三、opencv图像处理3:使用opencv原生方法遍历摄像头设备及调用(方便多摄像头遍历及调用,相比javacv更快的摄像头读取速度和效率,方便读取后的图像处理)
四、opencv图像处理系列:国内车辆牌照检测识别系统(万份测试准确率99.7%以上)
前言:
本章通过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:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
- 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)
- 用Java实现给图片添加文字水印
- java实现缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等
- java用内部类实现对图片的处理,缩放,添加水印,裁切
- Java代码实现给图片添加文字水印 详细教程一
- java实现给图片添加水印和文字
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
- Java使用OpenCV实现人脸识别/人眼检测/图片截取/合成/添加水印
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
- java实现给图片添加水印和文字
- Fragment中的Toolbar使用与处理,以及toobar在Java代码实现添加logo图片和文字
- Java实现给图片添加图片水印,文字水印及马赛克的方法示例
- JAVA实现图片的修改,添加文字水印效果
- java用内部类实现对图片的处理,缩放,添加水印,裁切