autojs某音霓虹特效

牙叔教程 簡單易懂javascript

效果展現

效果2.png

緣起

羣裏有人問某音的霓虹特效怎麼作, 併發了圖片, 看着還有點意思, 就研究了一下 效果1.jpgjava

autojs版本

9.0.4android

思路思路.png

你將學到如下知識點

  • 初始化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文檔, 最後纔是羣裏問問 --- 牙叔教程markdown

聲明

部份內容來自網絡 本教程僅用於學習, 禁止用於其餘用途網絡

相關文章
相關標籤/搜索