JavaCV实现照片马赛克效果

网友投稿 341 2022-09-02


JavaCV实现照片马赛克效果

目录前言准备工作代码实现完整代码

前言

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

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

准备工作

我们先引入 JavaCV 的依赖库

org.bytedeco

javacv-platform

1.5.6

这种方式引入,会把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

impvRUuWhZort org.bytedeco.opencv.global.opencv_imgproc

import org.bytedeco.opencv.opencv_core.Mat

import org.bytedeco.opencv.opencv_core.Size

fun main(args: Array) {

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)

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:深度学习笔记之用Python实现多层感知器神经网络(使用python 深度神经网络)
下一篇:SNMP学习笔记之Python的netsnmp和pysnmp的性能对比(net-snmp使用)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~