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

前言:

本章全部采用openCV中的Mat类型进行图像操作,Mat类型与CvMat和IplImage类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“图像”,openCV对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。

本章基于openCV来处理图像操作,除了基本的javacv.jar、javacpp.jar两个jar包外,还需要依赖opencv.jar、opencv-根据平台而定.jar。

1、实现的功能

(1)摄像头视频抓取

(2)Frame和Mat相互转换

(3)给图像添加文字

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

(5)保存图片

2、代码实现

运行后会出现一个窗口,窗口中会实时显示日期和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();

3、演示

csdn的文字水印请自动忽略,只有左上角日期和中间两个蓝色的eguid!是本程序添加的

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

  1. 在DirectShow的视频图像上叠加线条和文字

    在DirectShow的视频图像上叠加线条和文字 最近一直在从事工业测量方面的开发工作,难免会用到各种各样的相机,其中支持DX的USB相机开发起来比较方便,由于工作需要经常要在视频图像上叠加线条和文字 ...

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

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

  3. 用java实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

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

  4. DIV+CSS 让同一行的图片和文字对齐【转藏】

    DIV+CSS 让同一行的图片和文字对齐 DIV+CSS 让同一行的图片和文字对齐 在div+css布局中,如果一行(或一个DIV)内容中有图片和文字的话,图片和文字往往会一个在上一个在下,这是一个新 ...

  5. javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

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

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

  7. OpenCV图像处理篇之边缘检测算子

    OpenCV图像处理篇之边缘检测算子 转载: http://xiahouzuoxin.github.io/notes/ 3种边缘检测算子 一阶导数的梯度算子 高斯拉普拉斯算子 Canny算子 Open ...

  8. Asp.net 上传图片添加半透明图片或者文字水印的方法

    主要用到System.Drawing 命名空间下的相关类,如Brush.Image.Bitmap.Graphics等等类 Image类可以从图片文件创建Image的实例,Bitmap可以从文件也可以从 ...

  9. 在RichTextBox控件中添加图片和文字

    public void SetText(RichTextBox rtb) { rtb.Text = "在RichTextBox控件中添加图片和文字" + Environment.N ...

随机推荐

  1. java8 引进lamda

    就像泛型能使开发人员对数据类型进行抽象,Lambda的目的是让程序员能够对程序行为进行抽象. 你可以这样想,它能够让程序员把一段程序代码当做数据一样使用.一个方法可以像定义和使用一个变量那样的方式被定 ...

  2. Linux 下 Redis 安装与配置

    1.Redis 的安装 在 Ubuntu 系统安装 redis 可以使用以下命令: $ sudo apt-get update $ sudo apt-get install redis-server ...

  3. Luogu P3731 [HAOI2017]新型城市化

    题目显然可以转化为求每一条边对二分图最大独立集的贡献,二分图最大独立集\(=\)点数\(-\)最大匹配数,我们就有了\(50pts\)做法. 正解的做法是在原图上跑\(Tarjan\),最开始我想复杂 ...

  4. Django认证系统auth认证

    使用Django认证系统auth认证 auth认证系统可以处理范围非常广泛的任务,且具有一套细致的密码和权限实现.对于需要与默认配置不同需求的项目,Django支持扩展和自定义认证;会将用户信息写入到 ...

  5. Shell脚本开发过程中遇到的问题处理

    1. 执行shell脚本报  Unsupported major.minor version 52.0 报错原因:java文件jdk和服务器上的jdk不匹配, 解决方法: a.查看当前服务器用的jdk ...

  6. Maven的课堂笔记1

    1 什么是maven? Maven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理. Clean  compile  test  package  install   run ...

  7. Java+Selenium 常见问题QA

    一:日期控件二:上传控件三:页面隐藏元素四:弹出窗口的处理五:富文本框编辑器六:元素高亮 一:日期控件selenium不能直接对日期控件操作,可以通过js对日期控件做赋值操作 WebElement i ...

  8. Java 日期时间 Date类型,long类型,String类型表现形式的转换

    Java 日期时间 Date类型,long类型,String类型表现形式的转换 1.java.util.Date类型转换成long类型 java.util.Date dt = new Date(); ...

  9. gcc编译时对’xxxx’未定义的引用问题

    gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题,编译为.o(obj) 文件没有问题,但是编译(这一步应该是链接)为可执行 ...

  10. libgdx学习记录7——Ui

    libgdx中的UI设计主要通过其对应的Style类进行实现,也可以通过skin实现.如果没有编辑好的skin文件,可以创建一个默认的skin,再添加已经设计好的style类即可,然后在需要使用的地方 ...