美文网首页
autojs画图片轮廓

autojs画图片轮廓

作者: 牙叔教程 | 来源:发表于2021-07-08 22:38 被阅读0次
aaa.png
console.time("导入类");
runtime.images.initOpenCvIfNeeded();
importClass(org.opencv.core.MatOfByte);
importClass(org.opencv.core.Scalar);
importClass(org.opencv.core.Point);
importClass(org.opencv.core.CvType);
importClass(java.util.List);
importClass(java.util.ArrayList);
importClass(java.util.LinkedList);
importClass(org.opencv.imgproc.Imgproc);
importClass(org.opencv.imgcodecs.Imgcodecs);
importClass(org.opencv.core.Core);
importClass(org.opencv.core.Mat);
importClass(org.opencv.core.MatOfDMatch);
importClass(org.opencv.core.MatOfKeyPoint);
importClass(org.opencv.core.MatOfRect);
importClass(org.opencv.core.Size);
importClass(org.opencv.features2d.DescriptorExtractor);
importClass(org.opencv.features2d.DescriptorMatcher);
importClass(org.opencv.features2d.FeatureDetector);
importClass(org.opencv.features2d.Features2d);
importClass(org.opencv.core.MatOfPoint2f);
console.timeEnd("导入类");

let imgPath = files.path("./dy1_心_带背景.png");
let src1 = Imgcodecs.imread(imgPath); // 查找的图像
let contours = new java.util.ArrayList();
contour_info(src1, contours);

// 遍历轮廓, 提取数据
let bigArr = [];
let cxyArr = [];
let areaArr = [];
for (let i = 0; i < contours.size(); ++i) {
  let item = contours.get(i);
  // 最小外接矩形
  let rotateRect = Imgproc.minAreaRect(new MatOfPoint2f(item.toArray()));
  // 矩形中心
  cxyArr.push([rotateRect.center.x, rotateRect.center.y]);
  // 轮廓面积
  let area = Math.abs(Imgproc.contourArea(item));
  areaArr.push(area);
  var len = item.size();
  let arr = [];
  // 提取轮廓坐标
  for (var w = 0; w < len.width; w++) {
    for (var h = 0; h < len.height; h++) {
      arr.push(item.get(h, w));
    }
  }
  bigArr.push(arr);
}

var path = new android.graphics.Path();
var paint = new android.graphics.Paint();
paint.setColor(colors.parseColor("#ffff00"));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(5);
var img = images.read(imgPath);
var canvas = new Canvas(img);

log("轮廓面积列表");
log(areaArr); // [ 1745.5, 12161, 36100.5 ]
var len = bigArr.length;
for (var i = 0; i < len; i++) {
  // 过滤面积太小的轮廓
  // if (areaArr[i] < 25) {
  //   continue;
  // }
  let arr = bigArr[i];
  var arrLen = arr.length;
  path.moveTo(arr[0][0], arr[0][1]);
  for (var j = 1; j < arrLen; j++) {
    path.lineTo(arr[j][0], arr[j][1]);
  }
  path.close();
  // 画轮廓
  canvas.drawPath(path, paint);
  // 画轮廓中心
  let xy = cxyArr[i];
  canvas.drawPoint(xy[0], xy[1], paint);
}

var image = canvas.toImage();
images.save(image, "/sdcard/tmp.png");
app.viewFile("/sdcard/tmp.png");

// ===================自定义函数=====================
function contour_info(image, contours) {
  let dst = new Mat();
  Imgproc.GaussianBlur(image, dst, Size(3, 3), 0);
  let gray = new Mat();
  let binary = new Mat();
  Imgproc.cvtColor(dst, gray, Imgproc.COLOR_BGR2GRAY);
  Imgproc.threshold(gray, binary, 0, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);
  let hierarchy = new Mat();
  Imgproc.findContours(binary, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE, Point());
}

相关文章

  • autojs画图片轮廓

  • autojs查找图片相似轮廓

    牙叔教程 简单易懂 使用场景 查找和已有图片相似的轮廓 效果展示 查找轮廓结果 原图 要查找的图片 autojs版...

  • autojs查找轮廓相似的图片

    牙叔教程 简单易懂 效果展示 查找右上角的叉叉按钮 缘起 很多人都在想怎么查找右上角这个叉叉, 然后有人问我, 我...

  • autojs图片回收时img, bitmap和mat三者的关系

    牙叔教程 简单易懂 autojs图片的数据表现形式, 一共有三种 img: com.stardust.autojs...

  • 每日一画54

    勾轮廓的线条运用。线圈可以表现蓬松的图形。 怎么都画不出范画的感觉。算了,最后百度了绵羊的图片,对照图片瞎画啦。

  • autojs图片加水印

    牙叔教程 简单易懂 效果展示 修改列数 修改行数 修改旋转角度 修改颜色 环境 手机: Mi 11 Pro And...

  • autojs说啥画啥

    牙叔教程 简单易学 使用场景 你说个词, 我画个画, 目前就是显示一张图片,后期可以自己改成画画的方式来呈现图片 ...

  • PPT合并形状画煎蛋

    绘制煎蛋底座。用shift画圆,颜色用取色器吸取图片上的底座颜色,去掉轮廓。 画鸡蛋清。在煎蛋图片上绘制圆形,并精...

  • 解放双手神器-autojs

    什么是autojs?能干什么? 首先来说什么是autojs呢?autojs是Android平台上支持Node.js...

  • 零基础入门|手绘插画头像学习教程

    第一:拉长线 用铅笔简单画出头部轮廓 请输入图片描述 五官比例要画准确 请输入图片描述 画出衣服花纹、耳饰 请输入...

网友评论

      本文标题:autojs画图片轮廓

      本文链接:https://www.haomeiwen.com/subject/olkxpltx.html