autojs某音霓虹特效

牙叔教程 简单易懂

效果展示

在这里插入图片描述

缘起

群里有人问某音的霓虹特效怎么做, 并发了图片,
看着还有点意思, 就研究了一下
在这里插入图片描述

autojs版本

9.0.4

思路

## 思路![思路.png](https://img-blog.csdnimg.cn/img_convert/44e8cd09f81fa0819972bb4d3a1d5cda.png#clientId=u2d702779-a6ab-4&from=paste&height=931&id=ue4e1b13a&margin=[object Object]&name=思路.png&originHeight=931&originWidth=1066&originalType=binary&ratio=1&size=86717&status=done&style=none&taskId=ub85b49ea-98cd-41f5-a577-f6a3fe410b1&width=1066)

你将学到以下知识点

  • 初始化opencv
  • opencv读取图片
  • opencv读取灰度图片
  • opencv高斯模糊
  • opencv边缘检测
  • opencv查找轮廓
  • opencv绘制轮廓
  • opencv修改轮廓坐标
  • 创建Mat实例
  • Scalar颜色
  • 图片融合
  • opencv资源释放
  • mat写入文件

代码讲解

1. 初始化opencv
runtime.images.initOpenCvIfNeeded();
2. 导入类
importClass(org.opencv.core.CvType);
importClass(org.opencv.core.Scalar);
importClass(org.opencv.core.Point);
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.DescriptorMatcher);
importClass(org.opencv.features2d.Features2d);
importClass(android.graphics.Matrix);
importClass(org.opencv.android.Utils);
importClass(android.graphics.Bitmap);
3. 可设置的参数
let thickness = 2; //绘制轮廓的线的粗细
let kSize = 30; // 高斯内核的大小, 必须为整数或者奇数
let numberOfLayerOverlays = 3; // 高斯模糊叠加的图层数量, 用于制造发光效果
let color = "#ff0000";
4. 读取图片
let imgPath = files.path("./牙叔正方形.png");
var img = Imgcodecs.imread(imgPath);
5. 读取灰度图
var imgGray = Imgcodecs.imread(imgPath, 0);
6. 降噪
let imgBlur = imgGray.clone();
Imgproc.GaussianBlur(imgGray, imgBlur, Size(3, 3), 0);
7. 边缘检测
var imgCanny = imgBlur.clone();
Imgproc.Canny(imgBlur, imgCanny, 120, 200, 3, false);
8. 创建Mat实例
let rows = img.rows();
let cols = img.cols();
let imgContour = Mat(rows, cols, CvType.CV_8UC3);
9. 绘制轮廓
let red = colors.red(color);
let green = colors.green(color);
let blue = colors.blue(color);
let alpha = colors.alpha(color);
// cv::Scalar(v1, v2, v3, v4), 前面的三个参数是依次设置BGR的,和RGB相反,第四个参数设置图片的透明度
Imgproc.drawContours(imgContour, contours, -1, Scalar(blue, green, red, alpha), thickness, 8);
10. 查看图片
function viewMat(mat) {
  let tempFilePath = files.join(files.getSdcardPath(), "脚本", "mat.png");
  Imgcodecs.imwrite(tempFilePath, mat);
  app.viewFile(tempFilePath);
}

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问
— 牙叔教程

声明

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

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述

完整源码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牙叔教程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值