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 相关文章推荐
SpringBoot项目中控制台日志的保存配置操作
Jun 18 Java/Android
分析设计模式之模板方法Java实现
Jun 23 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
详解Java ES多节点任务的高效分发与收集实现
Jun 30 Java/Android
java设计模式--三种工厂模式详解
Jul 21 Java/Android
在Spring-Boot中如何使用@Value注解注入集合类
Aug 02 Java/Android
Spring Cloud 中@FeignClient注解中的contextId属性详解
Sep 25 Java/Android
Java 超详细讲解IO操作字节流与字符流
Mar 25 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Springboot中如何自动转JSON输出
Jun 16 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 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 fsockopen写的HTTP下载的类
2007/02/22 PHP
PHP 图片上传代码
2011/09/13 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
php创建sprite
2014/02/11 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
python利用Guetzli批量压缩图片
2017/03/23 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
高三语文教学反思
2014/01/15 职场文书
企业法人授权委托书
2014/04/03 职场文书
教师节活动总结
2014/08/29 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书
导游词之日月潭
2019/11/05 职场文书
java泛型通配符详解
2021/07/25 Java/Android
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android