牙叔教程 简单易懂
效果展示
KMeans 数据分类
- KMeans算法的作者是MacQueen, KMeans的算法是对数据进行分类的算法,采用的硬分类方式,是属于非监督学习的算法;
- 对于给定的样本集,按照样本之间的距离大小,将样本划分为K个簇,让簇内的点尽量紧密的连接在一起,而让簇间的距离尽量的大。
参数控制
- 聚类的颜色数量, 第一张图片是3个颜色, 其他是10个颜色
技能点
- 全屏
- 在autojs中使用kmeans
- 选择文件
- 绘制色卡
- list的使用
- 浏览和保存mat
- 颜色rgb三通道分离
- toolbar修改左上角图标及其颜色
环境
手机: Mi 11 Pro
Android版本: 12
Autojs版本: 9.1.6
代码讲解
1. 色卡是一个View
<View id="colorCard" marginTop="10" h="40dp" visibility="gone" bg="#ff0000"></View>
颜色聚类, 获取到数据以后, 绘制色卡用下面的方法
function drawColor(view, dataList) { var drawable = new android.graphics.drawable.Drawable({ draw: function (canvas) { var len = dataList.length; let viewWidth = view.getWidth(); let viewHeight = view.getHeight(); let lastX = 0; let paint = new android.graphics.Paint(); for (var i = 0; i < len; i++) { let color = dataList[i].color; let percent = dataList[i].percent; let x = lastX; let y = 0; let width = viewWidth * percent; let height = viewHeight; lastX = x + width; let rect = new android.graphics.Rect(x, y, x + width, y + height); paint.setColor(colors.parseColor(color)); canvas.drawRect(rect, paint); } }, }); view.setBackgroundDrawable(drawable); }
2. 颜色列表
<list id="list" marginTop="10"> <horizontal gravity="center" w="*" marginTop="16"> <card cardCornerRadius="15" w="30" h="30" marginRight="60" bg="#ff00ff"> <View id="colorDisplayArea" bg="{{this.color}}"> </View> </card> <text id="colorValue" w="110dp" marginRight="60" text="{{this.color}}" size="20sp" textColor="#000000"> </text> <text id="colorRatio" w="60dp" text="{{this.percent}}" size="20sp" textColor="#000000"> </text> </horizontal> </list>
美观一点, 我们把View呈现为圆形, 再显示颜色数值, 和颜色的比例
3. 选择文件
ui.logo.click(function () { intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); activity.startActivityForResult(intent, imgRequestCode); });
选择文件之前, 要设置文件选择监听, 然后获取到文件路径
4. 监听文件选择结果
activity.getEventEmitter().on("activity_result", (requestCode, resultCode, data) => { if (requestCode == imgRequestCode) { if (resultCode == activity.RESULT_OK) { let uri = data.getData(); let path = uri.getPath(); path = decodeURIComponent(path); } } });
5, 模块调试
if (typeof module === "object") { module.exports = getColorData; } else { let imgPath = "./small11645897022391.png"; getColorData(imgPath); }
有时候要单独调试模块, 不想频繁的切换注释module.exports, 就可以通过判断module是不是object,
如果是就说明是当模块来使用, 如果不是就说明在调试模块,
这样就不用一直切换module.exports的注释了
6. 图片类型
Imgproc.cvtColor(mat, mat2, Imgproc.COLOR_BGRA2RGBA);
保存图片之前, 需要转换图片的颜色类型, 因为opencv是bgr格式的图片, autojs是rgb格式的图片
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途