基于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.选出一个最优的阀值,根据比这个阀值大或小 ...
随机推荐
- HDU3480_区间DP平行四边形优化
HDU3480_区间DP平行四边形优化 做到现在能一眼看出来是区间DP的问题了 也能够知道dp[i][j]表示前 i 个节点被分为 j 个区间所取得的最优值的情况 cost[i][j]表示从i ...
- ASP.NET MVC ActionMethodSelectorAttribute 以及HttpGet等Action特性
一.ActionMethodSelectorAttribute 其是一个抽象类,继承自Attribute,子类有NonActionAttribute.HttpGetAttribute.HttpPost ...
- [javascript]jsonp-function 代码段
(function($1454395832823,arr_infoList /**/) { $1454395832823.push(' '); for(var i in arr_infoList) { ...
- cxGrid控件过滤筛选后如何获更新筛选后的数据集
cxGrid控件过滤筛选后如何获更新筛选后的数据集 (2015-06-19 12:12:08) 转载▼ 标签: delphi cxgrid筛选数据集 cxgrid过滤 分类: Delphi cxGri ...
- 搭建一台deeplearning的服务器
在计算机时代的早期,一名极客的满足感很大程度上来源于能DIY一台机器.到了深度学习的时代,前面那句话仍然是对的. 缘起在2013年,MIT科技评论将深度学习列为当年十大科技突破之首.其原因在于,模型有 ...
- 【转】老左常用国内/国外VPS推荐
原文:http://www.laozuo.org 老左从使用虚拟主机到VPS,至今也用过不少的商家产品,比如在"TOP10美国虚拟主机/网站空间推荐"有分享目前和曾经使用的虚拟主机 ...
- 【CF995F】 Cowmpany Cowmpensation
CF995F Cowmpany Cowmpensation Solution 这道题目可以看出我的代码能力是有多渣(代码能力严重退化) 我们先考虑dp,很容易写出方程: 设\(f_{i,j}\)表示以 ...
- 【sping揭秘】4、某些无法注册到IOC容器的对象如何交给spring托管
可以实现spring的factoryBean 接口,这样可以加入spring的IOC容器 比如现在有一个类叫MyObject,我们没有这个对象的源码,无法对这个对象进行操作,那么我们如何加入sprin ...
- Cookies与session的区别
Cookies 机制 Cookies是服务器在本地机器上存储的一段文本,并随每一个请求发送至同一个服务器. IETF RFC2965 HTTP State Management Mechanism 是 ...
- How To Scan QRCode For UWP (3)
这一节主要介绍如何去设置MediaCapture拍照的分辨率. MediaCapture 包含一个 VideoDeviceController对象,凭借它可以控制摄像头的很多设置,其中包括设置拍照的分 ...