一. 图像编辑器 Monica
Monica 是一款跨平台的桌面图像编辑软件,使用 Kotlin Compose Desktop 作为 UI 框架。
由于应用层是由 Kotlin 编写的,Monica 基于 mvvm 架构,使用 koin 作为依赖注入框架。
部分图像处理算法使用 OpenCV C++ 编写。
Monica 目前还处于开发阶段,当前版本的可以参见 github 地址:https://github.com/fengzhizi715/Monica
二. Kotlin 整合 OpenCV C++
在 Monica 中,有部分算法如果用 Kotlin 来写会太过于复杂而且速度慢。因此,我考虑用 OpenCV 来实现。
Kotlin 可以像 Java 一样通过 jni 调用 C++,下面是 Kotlin 编写调用 jni 层的代码:
object ImageProcess {
init { // 对于不同的平台加载的库是不同的,mac 是 dylib 库,windows 是 dll 库,linux 是 so 库
if (isMac) { // 即使是 mac 系统,针对不同的芯片 也需要加载不同的 dylib 库
System.load("${FileUtil.loadPath}libMonicaImageProcess.dylib")
}
}
/**
* 该算法库的版本号
*/
external fun getVersion():String
/**
* 当前使用的 OpenCV 的版本号
*/
external fun getOpenCVVersion():String
/**
* 直方图均衡化
*/
external fun equalizeHist(src: ByteArray):IntArray
/**
* gamma 校正
*/
external fun gammaCorrection(src: ByteArray,k:Float):IntArray
/**
* laplace 锐化,主要是 8 邻域卷积核
*/
external fun laplace(src: ByteArray):IntArray
/**
* USM 锐化
*/
external fun unsharpMask(src: ByteArray, radius:Int, threshold:Int, amount:Int):IntArray
/**
* 自动色彩均衡
*/
external fun ace(src: ByteArray, ratio:Int, radius:Int):IntArray
}
而对于 jni 层:cn_netdiscovery_monica_opencv_ImageProcess.h:
#include <jni.h>
#ifndef MONICAIMAGEPROCESS_CN_NETDISCOVERY_MONICA_OPENCV_IMAGEPROCESS_H
#define MONICAIMAGEPROCESS_CN_NETDISCOVERY_MONICA_OPENCV_IMAGEPROCESS_H
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jstring JNICALL Java_cn_netdiscovery_monica_opencv_ImageProcess_getVersion
(JNI

最低0.47元/天 解锁文章
2896

被折叠的 条评论
为什么被折叠?



