大家好,我是青空。

最近青空在做一些图像处理的工作,主要是使用到了OpenCV。可能有的小伙伴听过OpenCV,OpenCV是通过C++开发的,官方只提供了C++、Python、JS 等版本的API。

Java 使用OpenCV 原生的库,比较麻烦,需要配置一些环境变量。指北君在GitHub上找了一圈,终于找到了一个Java版本的项目 – JavaCV ,JavaCV 直接把OpenCV给嵌入到内部,不再需要其他的环境变量的支持。JavaCV另外包含了FFmpeg、Tesseract等一系列的音视频相关的库。

今天青空就要带大家一起使用 JavaCV 将一张图片转换成一副字符画。

准备工作

我们需要引入 JavaCV的依赖库

  <dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.6</version></dependency>

另外,我们还需要准备一个图片

接下来我们就可以着手写代码了。

先使用opencv读取图片

String path = "your path";
Mat img = opencv_imgcodecs.imread(path + "cards.jpg");

由于图片的宽高太大,做字符画不太好, 所以需要进行缩放。

opencv_imgproc.resize(img, img,new Size(), 0.3, 0.3, opencv_imgproc.CV_INTER_LINEAR);

接下来,我们需要把图片转化成灰度图片

Mat imgGray = new Mat(img.size());
opencv_imgproc.cvtColor(img, imgGray, opencv_imgproc.COLOR_BGR2GRAY);

我们来看下,灰度图片是怎么样的

UByteIndexer indexer = (UByteIndexer) imgGray.createIndexer();
int[]  bgr = new int[3];
for (long i = 0; i < indexer.rows() -1; i++) {for (long j = 0; j <indexer.cols()-1; j++) {indexer.get(i,j, bgr);int gray = (bgr[0] + bgr[1] + bgr[2]) %  charStr.length() ;strImage.append(String.valueOf(charStr.charAt(gray)));}strImage.append("\n");
}

通过获取灰度图片,每个点位的bgr颜色,然后根据颜色值转换成对应的字符,拼接形成一个完整的字符画。

好了,我们这次制作字符画就结束了。 完整的代码如下:

public class App
{private static final String path = "your path";private static final String charStr = " .,-'`:!1+*abcdefghijklmnopqrstuvwxyz<>()\\/{}[]?234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ%&@#$";public static void main( String[] args ) throws IOException {Mat img = opencv_imgcodecs.imread(path + "shapes.png");opencv_imgproc.resize(img, img,new Size(), 0.3, 0.3, opencv_imgproc.CV_INTER_LINEAR);Mat imgGray = new Mat(img.size());opencv_imgproc.cvtColor(img, imgGray, opencv_imgproc.COLOR_BGR2GRAY);//opencv_imgproc.threshold(imgGray, imgGray, 127, 255, opencv_imgproc.CV_THRESH_BINARY);opencv_highgui.imshow("gray", imgGray);StringBuilder strImage = new StringBuilder();opencv_highgui.waitKey(0);UByteIndexer indexer = (UByteIndexer) imgGray.createIndexer();int[]  bgr = new int[3];for (long i = 0; i < indexer.rows() -1; i++) {for (long j = 0; j <indexer.cols()-1; j++) {indexer.get(i,j, bgr);int gray = (bgr[0] + bgr[1] + bgr[2]) %  charStr.length() ;strImage.append(String.valueOf(charStr.charAt(gray)));}strImage.append("\n");}FileOutputStream fileOutputStream = new FileOutputStream(path + "file.txt");fileOutputStream.write(strImage.toString().getBytes());fileOutputStream.close();}
}

总结

今天青空给大家展示了如何使用JavaCV制作一幅字符画。JavaCV可以做到事情还有很多很多,后面将持续更新。

JavaCV 制作字符画相关推荐

  1. Python制作字符画(pillow,numpy的使用)

    Python制作字符画 简介:本文讲解,如何使用python制作字符画,这里使用的是pillow和numpy这两个python的库. 字符画: 简单的字符画是利用字符的形状代替图画的线条来构成简单的人 ...

  2. 字符画君君C语言,20行代码制作字符画版小黄鸭表情包 | 文末送书抽奖结果

    点击上方"日常学python",选择"置顶公众号" 第一时间关注 Python 技术干货! 阅读文本大概需要 5 分钟. 前段时间,一只可爱的小黄鸭火起来了,据 ...

  3. python制作字符画视频来啦~

    字符画是什么? 字符画是一系列字符的组合,我们可以把字符看作是比较大块的像素,一个字符能表现一种颜色,字符的种类越多,可以表现的颜色也越多,图片也会更有层次感. 如果我们想要手工绘制出字符画,首先要有 ...

  4. python画动态小黄鸭_20行代码制作字符画版小黄鸭表情包

    前段时间,一只可爱的小黄鸭火起来了,据说是抖音上一位黄衣小姐姐模仿小黄鸭的动作而走红.这只动作呆萌的小黄鸭表情包也跟着火起来了,小黄鸭表情包也由一只变成多只,颜色也变幻莫测.pk 哥的技术交流群前段时 ...

  5. 第一个项目:字符画神器——全程制作历程

    第一个项目:字符画神器--全程制作历程 本文适用于:java入门程序员 **读本文你可以学到: 1.一个初级程序员是如何设计初级程序的. 2.字符画的设计原理. 3.ffmpeg的截取画面与图片合成视 ...

  6. python画鸟_菜鸟世界 -使用python制作一张字符画

    1.灰度图与字符画 黑白照片大家都不陌生,但黑白照片并不是只有黑白两种颜色,还有介于黑和白之间的颜色,这些颜色色深度从0到255,0是黑色,255是白色,也叫灰度值 制作一张字符画的原理就是先将一张图 ...

  7. 福利!Python制作动态字符画(附源码)

    字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条来构成简单的人物.事物等形象,它一般由人工制作而成:复杂的字符画通常利用占用不同数量像素的字符代替图画上不 ...

  8. sql数字转换为字符_Python|图片转换为字符画^_^

    我们很清楚什么是图片,无外乎png.jpg等格式的文件,例如这个? 但什么是字符画呢?先看一下官方介绍: 字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条 ...

  9. html 字符画,字符画

    字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条来构成简单的人物.事物等形象,它一般由人工制作而成:复杂的字符画通常利用占用不同数量像素的字符代替图画上不 ...

  10. c++ascii码转换为数字_平面设计人员必备Image Ascii,快速将图像转换为Ascii字符画!...

    从事平面设计的小伙伴,可能会遇到这样的烦恼,图片生成Ascii字符画!what???新手小白表示听都没听过,老司机们表示稍微有点难度.那么如何快速的将图片生成字符画呢?^_^接下来划重点咯!就是这款I ...

最新文章

  1. BigPipe学习研究
  2. [MATLAB学习笔记]clf清空图窗1013(1)
  3. Verilog自编函数clog2替代SV中的系统函数$clog2
  4. 学生命科学要学计算机吗,现在学生物学出路真的有那么不济吗?
  5. 可耗竭且不可回收的资源
  6. 计算机面试的时候写过的代码,程序员悲催瞬间:来之不易的美团面试,我尽然挂了(还原真实场景)...
  7. bzoj 1084 DP
  8. USB设备开发之STM32
  9. mongodb mysql配置_mongoDB数据库原生配置
  10. 一个简化的插件框架c#
  11. 【微软商店(Microsoft Store)重置后打不开,商店下载不了应用的解决方法】
  12. 如何使用origin画韦恩图?
  13. 怎么看懂计算机代码,程序员如何看懂别人的代码(干货,实用)
  14. Java中动态代理使用与原理详解
  15. Android市场变化令微软很受伤 专利授权收入锐减26%
  16. 讲的是切片,但好像又不只是切片?
  17. 《我是一只IT小小鸟》读后感,献给要正在找工作的有缘朋友
  18. Kubernetes(K8S)各种错误及解决方法
  19. Hadoop MapReduce编程 API入门系列之查找相同字母组成的字谜(三)
  20. Elasticsearch(二):理解index, Document, Field

热门文章

  1. 计算机未来职业规划英语作文,我未来的计划英语作文(通用10篇)
  2. Wox - 开源免费强大的快捷启动器辅助工具,快速高效率打开软件/搜索文件!
  3. 一个点击率10万+的恶搞程序送给大家!
  4. 【论文分享】ARBITRAR: User-Guided API Misuse Detection
  5. C语言中文网 读后感
  6. 设置电子围栏 高德地图_Android 高德地图的使用, 根据手势拖动绘制电子围栏
  7. 计算机d代表什么,DVI-D和DVI-I区别是什么?
  8. 格式化U盘提示Windows 无法完成格式化
  9. 给设计师的建设性反馈
  10. xp装html5,WindowsXP系统如何安装IIS5.1