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 相关文章推荐
浅谈@Value和@Bean的执行顺序问题
Jun 16 Java/Android
Netty结合Protobuf进行编解码的方法
Jun 26 Java/Android
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
Sep 25 Java/Android
SpringCloud之@FeignClient()注解的使用方式
Sep 25 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
Java 超详细讲解hashCode方法
Apr 07 Java/Android
Java实现注册登录跳转
Jun 16 Java/Android
Java Spring Boot请求方式与请求映射过程分析
Jun 25 Java/Android
OpenFeign实现远程调用
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使用pdo连接mssql server数据库实例
2014/12/25 PHP
php正则表达式学习笔记
2015/11/13 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
Yii框架安装简明教程
2020/05/15 PHP
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
简单了解Django ContentType内置组件
2019/07/23 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
意大利奢侈品网站:Italist
2016/08/23 全球购物
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
测量实习生自我鉴定
2013/09/19 职场文书
建筑施工实习自我鉴定
2013/09/19 职场文书
企划主管岗位职责
2013/12/12 职场文书
物流管理专业职业生涯规划书
2014/01/06 职场文书
化验室岗位职责
2015/02/14 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
第二次离婚起诉书
2015/05/18 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python