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并发编程之Executor接口的使用
Jun 21 Java/Android
Feign调用全局异常处理解决方案
Jun 24 Java/Android
一篇文章带你学习Mybatis-Plus(新手入门)
Aug 02 Java/Android
浅谈spring boot使用thymeleaf版本的问题
Aug 04 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
深入浅出讲解Java8函数式编程
Jan 18 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
向Spring IOC 容器动态注册bean实现方式
Jul 15 Java/Android
Spring Boot 的创建和运行示例代码详解
Jul 23 Java/Android
volatile保证可见性及重排序方法
Aug 05 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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
smarty表格换行实例
2014/12/15 PHP
浅谈php冒泡排序
2014/12/30 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
php实现图片缩略图的方法
2016/03/29 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
Python中functools模块的常用函数解析
2016/06/30 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
python实现扫描ip地址的小程序
2019/04/16 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
python怎么调用自己的函数
2020/07/01 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
奥巴马就职演讲稿
2014/05/15 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技