所在的位置: js >> js发展 >> opencvkmeans图片颜色量化

opencvkmeans图片颜色量化

牙叔教程简单易懂

效果展示

KMeans数据分类

KMeans算法的作者是MacQueen,KMeans的算法是对数据进行分类的算法,采用的硬分类方式,是属于非监督学习的算法;

对于给定的样本集,按照样本之间的距离大小,将样本划分为K个簇,让簇内的点尽量紧密的连接在一起,而让簇间的距离尽量的大。

参数控制

聚类的颜色数量,第一张图片是3个颜色,其他是10个颜色

技能点

全屏

在autojs中使用kmeans

选择文件

绘制色卡

list的使用

浏览和保存mat

颜色rgb三通道分离

toolbar修改左上角图标及其颜色

环境

手机:Mi11Pro

Android版本:12

Autojs版本:9.1.6

代码讲解

1.色卡是一个View

Viewid="colorCard"marginTop="10"h="40dp"visibility="gone"bg="#ff"/View

颜色聚类,获取到数据以后,绘制色卡用下面的方法

functiondrawColor(view,dataList){vardrawable=newandroid.graphics.drawable.Drawable({draw:function(canvas){varlen=dataList.length;letviewWidth=view.getWidth();letviewHeight=view.getHeight();letlastX=0;letpaint=newandroid.graphics.Paint();for(vari=0;ilen;i++){letcolor=dataList[i].color;letpercent=dataList[i].percent;letx=lastX;lety=0;letwidth=viewWidth*percent;letheight=viewHeight;lastX=x+width;letrect=newandroid.graphics.Rect(x,y,x+width,y+height);paint.setColor(colors.parseColor(color));canvas.drawRect(rect,paint);}},});view.setBackgroundDrawable(drawable);}

2.颜色列表

listid="list"marginTop="10"  horizontalgravity="center"w="*"marginTop="16"    cardcardCornerRadius="15"w="30"h="30"marginRight="60"bg="#ff00ff"      Viewid="colorDisplayArea"bg="{{this.color}}"      /View    /card    textid="colorValue"w="dp"marginRight="60"text="{{this.color}}"size="20sp"textColor="#00"    /text    textid="colorRatio"w="60dp"text="{{this.percent}}"size="20sp"textColor="#00"    /text  /horizontal/list

美观一点,我们把View呈现为圆形,再显示颜色数值,和颜色的比例

3.选择文件

ui.logo.click(function(){intent=newIntent(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){leturi=data.getData();letpath=uri.getPath();path=decodeURIComponent(path);}}});

5,模块调试

if(typeofmodule==="object"){module.exports=getColorData;}else{letimgPath="./small91.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文档,最后才是群里问问---牙叔教程

声明

部分内容来自网络本教程仅用于学习,禁止用于其他用途




转载请注明:http://www.aierlanlan.com/tzrz/5092.html

  • 上一篇文章:
  •   
  • 下一篇文章: