JavaCV实现照片马赛克效果


Posted in Java/Android onJanuary 22, 2022

前言

青空最近在逛一些社区的时候发现了有很多图片是像素图,感觉挺好玩的。正巧最近自己在学习JavaCV,所以在这里给大家演示一下如何使用JavaCV来处理像素图。

像素图其实有点类似于类似于打马赛克的功能。通过像素的变化,演示一个像素画的功能。像素画在 NFT 中特别的流行。

准备工作

我们先引入 JavaCV 的依赖库

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

这种方式引入,会把javacv 所有包含的都引入进来。平时测试使用都时候,可以这样操作。但是到真实项目中,还是需要做一次精简才行。

另外我们准备了一个图片。

JavaCV实现照片马赛克效果

代码实现

读取文件

val path ="path/to/img/"
    val img = opencv_imgcodecs.imread(path + "meinv.jpeg")

获取原图的像素宽高,然后进行像素比缩放。

val size = img.size()
    val height = size.height()
    val width = size.width()
    
    val pixelSize = 10
    
    val newWidth = width / pixelSize
    val newHeight = height / pixelSize

根据设定的像素比, 对原图进行缩小,再放大的两次 resize 操作。这样就完成了像素图的处理。

val imgTmp: Mat? = null
    opencv_imgproc.resize(img, imgTmp, Size(newWidth, newHeight),0.0, 0.0, opencv_imgproc.INTER_NEAREST)
    opencv_imgproc.resize(img, imgTmp, Size(width, height),0.0, 0.0, opencv_imgproc.INTER_NEAREST)

那我们来看下处理过之后的图像效果吧

效果看起来还可以,图片颜色单一图片尺寸稍微小一些的效果会好很多。

完整代码

import org.bytedeco.opencv.global.opencv_highgui
import org.bytedeco.opencv.global.opencv_imgcodecs
import org.bytedeco.opencv.global.opencv_imgproc
import org.bytedeco.opencv.opencv_core.Mat
import org.bytedeco.opencv.opencv_core.Size

fun main(args: Array<String>) {

    val path = "path/to/img/"
    val img = opencv_imgcodecs.imread(path + "meinv.jpeg")

    val size = img.size()
    val height = size.height()
    val width = size.width()

    val pixelSize = 10

    val newWidth = width / pixelSize
    val newHeight = height / pixelSize

    val imgTmp: Mat? = null
    opencv_imgproc.resize(img, imgTmp, Size(newWidth, newHeight), 0.0, 0.0, opencv_imgproc.INTER_NEAREST)
    opencv_imgproc.resize(img, imgTmp, Size(width, height), 0.0, 0.0, opencv_imgproc.INTER_NEAREST)


    opencv_highgui.imshow("meinv", img);
    opencv_highgui.waitKey(0)

}

到此这篇关于JavaCV实现照片马赛克效果的文章就介绍到这了,更多相关JavaCV内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
一篇带你入门Java垃圾回收器
Jun 16 Java/Android
新手入门Jvm-- JVM对象创建与内存分配机制
Jun 18 Java/Android
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
Lombok的详细使用及优缺点总结
Jul 15 Java/Android
Java Spring 控制反转(IOC)容器详解
Oct 05 Java/Android
Java中try catch处理异常示例
Dec 06 Java/Android
Java实现学生管理系统(IO版)
Feb 24 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Java 常见的限流算法详细分析并实现
Apr 07 Java/Android
SpringBoot Http远程调用的方法
Aug 14 Java/Android
maven依赖的version声明控制方式
深入浅出讲解Java8函数式编程
Jan 18 #Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 #Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 #Java/Android
springboot中的pom文件 project报错问题
Jan 18 #Java/Android
java代码实现空间切割
You might like
PHP中for循环语句的几种变型
2007/03/16 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
joomla组件开发入门教程
2016/05/04 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
2016/06/07 Python
Python递归函数定义与用法示例
2017/06/02 Python
python3实现多线程聊天室
2018/12/12 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
天巡全球:Skyscanner Global
2017/06/20 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
庆七一主持词
2015/06/29 职场文书
感恩教育主题班会
2015/08/12 职场文书
反邪教学习心得体会
2016/01/15 职场文书
python自动化八大定位元素讲解
2021/07/09 Python