基于opencv将视频转化为字符串Java版
基于opencv将视频转化为字符串Java版
先上一个效果图吧

首先,弄清一下原理
我们要将视频转化为字符画,那么就需要获取画面的每一帧,也就是每一张图片,然后将图片进行转化,变成字符串,然后进行打印。
1.获取视频
在opencv中提供了一个函数去获取视频
VideoCapture capture = new VideoCapture("");//里面放图片的地址
//ps:如果里面为0[不要"",就是整数0],则就对默认摄像头进行抓取
Mat mat = new Mat();
//读取下一帧
capture.read(mat);//返回值为boolean类型
设想一下,如果我们使用循环去读取下一帧,那么就可以源源不断的得到视频画面了
2.灰度转换
先说一下图片的转换原理:我们是根据图片像素点上面颜色的深浅来使用不同复杂程度的字符来替代它.那么这时候我们就可以将图片进行灰度转换,颜色深的地方放复杂的字符就行了.
Mat img_mat = new Mat();
//mat表示要要转换的图片[Mat类型],img_mat表示转换后的图片
Imgproc.cvtColor(mat, img_mat, Imgproc.COLOR_RGB2GRAY);
//获得图片的灰度值 i,j 表示像素点的位置(姑且理解为像素点吧)
int gray = (int) img_mat.get(i, j)[0];
3.字符串转换
我们会根据灰度的大小放不同的字符
String ascii = "#8XOHLTI)i=+;:,. ";//字符串由复杂到简单
StringBuilder result = new StringBuilder();
//使用for循环获得图像每一个地方的灰度值
for (int i = 0; i < img_mat.rows(); i+=14) {
//i+14 j+14 每隔14取一个点 是防止视频过大,产生的result过长,整个屏幕无法显示完全
for (int j = 0; j < img_mat.cols(); j+=14) {
StringBuilder result = new StringBuilder();
int gray = (int) img_mat.get(i, j)[0];
//Math.round进行四舍五入
int index = Math.round(gray * (ascii.length() + 1) / 255);
result.append(index >= ascii.length() ? "." : String.valueOf(ascii.charAt(index)));
}
result = result.append("\n");
}
//Ubuntu 进行清屏操作
System.out.print("\033c");
System.out.println(result);
注意:不要使用result+="",因为这个在很长的字符串上连接效率太慢.
总结
总的来说,就是根据视频的灰度的大小,用不同复杂度的字符串来替代。
如果你喜欢这篇文章的话,就给个start✮吧,项目下载地址:GitHub⊙﹏⊙∥∣°
≡(▔﹏▔)≡
opencv 在Ubuntu环境下的搭建我会在下篇讲哦
<(‵^′)>
基于opencv将视频转化为字符串Java版的更多相关文章
- 基于OpenCV之视频读取,处理和显示框架的搭建(一)
主要包括以下内容: 1.使用的主要函数的说明. 2.两个实例:视频读取和显示.搭建视频读取和处理框架,调用canny函数提取边缘并显示. 3.一些注意事项和代码说明. 一.使用的主要函数 1.延时函数 ...
- WebService之基于REST机制的实现实例(Java版)
REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移).2000年Roy Fielding博士在他的博士论文“Architectural Sty ...
- 【线性表基础】基于线性表的简单算法【Java版】
本文描述了基于线性表的简单算法及其代码[Java实现] 1-1 删除单链表中所有重复元素 // Example 1-1 删除单链表中所有重复元素 private static void removeR ...
- 如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)
记得上<数据结构>课程时,利用栈的特性解决过四则混合运算表达式.而如今在编写小型关系数据库的时候,编译部分要处理where后面的逻辑表达式——检查语法正确与否的同时,还要将信息传给下一个接 ...
- 基于OpenCv的人脸检测、识别系统学习制作笔记之一
基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...
- 基于OpenCv和swing的图片/视频展示Java实现
基于OpenCv和swing实现图片/视频的展示 图片的展示 swing展示图片,多为操作BufferedImage,这里要关注的核心是将Mat转为BufferedImage. 代码如下: publi ...
- 基于opencv网络摄像头在ubuntu下的视频获取
基于opencv网络摄像头在ubuntu下的视频获取 1 工具 原料 平台 :UBUNTU12.04 安装库 Opencv-2.3 2 安装编译运行步骤 安装编译opencv-2.3 参 ...
- 基于opencv在摄像头ubuntu根据视频获取
基于opencv在摄像头ubuntu根据视频获取 1 工具 原料 平台 :UBUNTU12.04 安装库 Opencv-2.3 2 安装编译执行步骤 安装编译opencv-2.3 參考h ...
- Java基于opencv实现图像数字识别(五)—投影法分割字符
Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...
随机推荐
- 关于java弱引用
最近在学java虚拟机相关的东西,看了一篇微信的推送 在此分享https://mp.weixin.qq.com/s/oLhZWWWIVc90cNUBukkqHw 一.强引用 强引用就是我们经常使用的 ...
- Nvu
在Jennifer Niederst Robbins的书<Learning Web design>(密码:v9i1)推荐软件Nvu 界面: Nvu tips:
- 前端开发 - JavaScript
本节内容 一.如何编写 二.变量 三.数据类型 四.其他 五.语句与异常 六.函数 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScri ...
- Asp .Net core 2 学习笔记(3) —— 静态文件
这个系列的初衷是便于自己总结与回顾,把笔记本上面的东西转移到这里,态度不由得谨慎许多,下面是我参考的资源: ASP.NET Core 中文文档目录 官方文档 记在这里的东西我会不断的完善丰满,对于文章 ...
- WPF 介绍一种在MVVM模式下弹出子窗体的方式
主要是通过一个WindowManager管理类,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show方法,显示出来 ...
- codefirst数据迁移技术,在保留数据库数据下实现对模型的修改并映射到数据库
一前言 这是我的处女作,写的不好的地方还望指出共同讨论.EF的数据访问方式有三种DbFirst,ModelFirst,还有本文要提到的CodeFirst 三者都是以ORM的方式建立.本人之前学习的.n ...
- python互斥锁
互斥锁 进程之间数据隔离, 但是多个进程可以共享同一块数据,比如共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如下 from mu ...
- 关于Mybatis中Mapper是使用XML还是注解的一些思考
XML 据说可以灵活的进行注解,但是修改以后还是要重新发布程序.当然,你可以说,在Tomcat中改了,然后热加载了,不就可以了.可是一般情况下都是几台,十几台服务器.都是用发布系统,持续集成的方式部署 ...
- 55.storm 之 hello word(本地模式)
strom hello word 概述 然后卡一下代码怎么实现的: 编写数据源类:Spout.可以使用两种方式: 继承BaseRichSpout类 实现IRichSpout接口 主要需要实现或重写几个 ...
- 理解web service 和 SOA
什么是SOA? SOA的全称为Service Oriented Architecture,即面向服务架构.这是一种架构理念.它的提出是在企业计算领域将耦合的系统划分为松耦合的无状态的服务.服务发布出来 ...