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 相关文章推荐
Spring整合Mybatis的全过程
Jun 28 Java/Android
Java 泛型详解(超详细的java泛型方法解析)
Jul 02 Java/Android
Java 语言中Object 类和System 类详解
Jul 07 Java/Android
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
Jul 26 Java/Android
java多态注意项小结
Oct 16 Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
Jan 18 Java/Android
Java9新特性之Module模块化编程示例演绎
Mar 16 Java/Android
Spring事务管理下synchronized锁失效问题的解决方法
Mar 31 Java/Android
Java 超详细讲解十大排序算法面试无忧
Apr 08 Java/Android
Android开发之底部导航栏的快速实现
Apr 28 Java/Android
多线程Spring通过@Scheduled实现定时任务
May 25 Java/Android
Java使用HttpClient实现文件下载
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 echo 输出字符串函数详解
2010/05/13 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
PHP图片水印类的封装
2017/07/06 PHP
javascript tips提示框组件实现代码
2010/11/19 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
python 弧度与角度互转实例
2020/04/15 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
Java如何格式化日期
2012/08/07 面试题
怎么写有吸引力的自荐信
2013/11/17 职场文书
公司面试感谢信
2014/02/01 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
python APScheduler执行定时任务介绍
2022/04/19 Python