基于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版的更多相关文章

  1. 基于OpenCV之视频读取,处理和显示框架的搭建(一)

    主要包括以下内容: 1.使用的主要函数的说明. 2.两个实例:视频读取和显示.搭建视频读取和处理框架,调用canny函数提取边缘并显示. 3.一些注意事项和代码说明. 一.使用的主要函数 1.延时函数 ...

  2. WebService之基于REST机制的实现实例(Java版)

    REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移).2000年Roy Fielding博士在他的博士论文“Architectural Sty ...

  3. 【线性表基础】基于线性表的简单算法【Java版】

    本文描述了基于线性表的简单算法及其代码[Java实现] 1-1 删除单链表中所有重复元素 // Example 1-1 删除单链表中所有重复元素 private static void removeR ...

  4. 如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)

    记得上<数据结构>课程时,利用栈的特性解决过四则混合运算表达式.而如今在编写小型关系数据库的时候,编译部分要处理where后面的逻辑表达式——检查语法正确与否的同时,还要将信息传给下一个接 ...

  5. 基于OpenCv的人脸检测、识别系统学习制作笔记之一

    基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...

  6. 基于OpenCv和swing的图片/视频展示Java实现

    基于OpenCv和swing实现图片/视频的展示 图片的展示 swing展示图片,多为操作BufferedImage,这里要关注的核心是将Mat转为BufferedImage. 代码如下: publi ...

  7. 基于opencv网络摄像头在ubuntu下的视频获取

     基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参 ...

  8. 基于opencv在摄像头ubuntu根据视频获取

     基于opencv在摄像头ubuntu根据视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译执行步骤 安装编译opencv-2.3  參考h ...

  9. Java基于opencv实现图像数字识别(五)—投影法分割字符

    Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...

随机推荐

  1. Scala_类

    类 简单类 最简单的类的定义形式是: class Test1 {  //这里定义类的字段和方法} 可以使用new关键字来生成对象 var test = new Test1() 给类增加字段和方法 Un ...

  2. 所有网卡常用信息获取集中展示(CentOS6 &CentOS7)

    查看所有网卡,状态.光电类型.ip.广播地址.掩码 1.命令如下 ( string='|%-3s|%-18s|%-10s|%-10s|%-10s|%-16s|%-16s|%-16s|'; br=&qu ...

  3. ipad协议

    getLoginQRCode (获取登录二维码)CheckLoginQRCode(检测扫码状态)ManualAuth(扫码登录)ManualAuth(62数据登录)ManualAuth(账号密码登录) ...

  4. Git入门--创建版本库,关联远程库,从远程库下载

    1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点 ...

  5. 微服务统一登陆认证怎么做?JWT ?

    无状态登录原理 1.1.什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登 ...

  6. python爬虫实践教学

    i春秋作家:Mochazz 一.前言 这篇文章之前是给新人培训时用的,大家觉的挺好理解的,所以就分享出来,与大家一起学习.如果你学过一些python,想用它做些什么又没有方向,不妨试试完成下面几个案例 ...

  7. Linux巩固记录(6) Hbase环境准备-zookeeper安装

    Hbase是运行在hadoop之上,所以请参考第3篇文章搭建好一个master,两个slave的hadoop环境,我采用的版本为hadoop2.7.4 不了解Hbase的同学可以参考下这篇文章,分析得 ...

  8. zookeeper 备忘

    cd /bin $ ./zkCli.sh ls /a 查看 ls /a true 查看并watch create –e /a 临时节点 create –s /a 顺序节点 create –e –s / ...

  9. macbook 安装oracle RAC

    http://blog.itpub.net/29047826/viewspace-1268923/ http://blog.itpub.net/24930246/viewspace-1426856/

  10. 【源码分析】HashMap源码再读-基于Java8

    最近工作不是太忙,准备再读读一些源码,想来想去,还是先从JDK的源码读起吧,毕竟很久不去读了,很多东西都生疏了.当然,还是先从炙手可热的HashMap,每次读都会有一些收获.当然,JDK8对HashM ...