autojs-opencv常用命令

简介: autojs-opencv常用命令
// 初始化opencv
runtime.images.initOpenCvIfNeeded();


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.DescriptorExtractor);
importClass(org.opencv.features2d.DescriptorMatcher);
importClass(org.opencv.features2d.FeatureDetector);
importClass(org.opencv.features2d.Features2d);
importClass(android.graphics.Matrix);
importClass(org.opencv.android.Utils);
importClass(android.graphics.Bitmap);


// 读取图片
var img = Imgcodecs.imread(imgPath);
// 读取灰度图
var img = Imgcodecs.imread(imgPath, 0);
// 写入图片
Imgcodecs.imwrite(imgPath, img);


// opencv的mat转bitmap
function mat2bitmap(img) {
  let width = img.width();
  let height = img.height();
  let bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
  Utils.matToBitmap(img, bitmap);
  return bitmap;
}


// 缩放bitmap
function zoomBitmap(bitmap, scale) {
  let matrix = new Matrix();
  matrix.postScale(scale, scale); //长和宽放大缩小的比例
  let resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
  return resizeBmp;
}


// 图片控件设置bitmap
ui.img.setImageBitmap(bitmap);


function 二值化图片(imgPath) {
  let dst = new Mat();
  let maxValue = 255;
  let adaptiveMethod = Imgproc.ADAPTIVE_THRESH_MEAN_C;
  let thresholdType = Imgproc.THRESH_BINARY_INV;
  let blockSize = 3;
  let C = 4;
  Imgproc.adaptiveThreshold(grayImg, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C);
  return dst;
}


function newSize(size) {
  if (!Array.isArray(size)) {
    size = [size, size];
  }
  if (size.length == 1) {
    size = [size[0], size[0]];
  }
  return new org.opencv.core.Size(size[0], size[1]);
}


// 定义轮廓变量
let contours = new java.util.ArrayList();
// 轮廓长度
let len = contours.size();
// 找轮廓
Imgproc.findContours(img, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE, Point());
// 画轮廓
Imgproc.drawContours(img, contours, i, Scalar(0, 0, 0), -1);
// 外接矩形
let rect = Imgproc.boundingRect(contour);
// 面积
let area = rect.area();
// 宽高
let width = rect.width;
let height = rect.height;
// 左上角
let left = rect.x;
let top = rect.y;


// 黑帽
Imgproc.morphologyEx(
      img1,
      img2,
      Imgproc.MORPH_BLACKHAT,
      Imgproc.getStructuringElement(Imgproc.MORPH_RECT, newSize(5))
    );
// 开运算
// 开运算是通过先对图像腐蚀再膨胀实现的。
// 腐蚀图像中的小白点, 膨胀后小白点直接就没有了, 扩大黑色部分
let openMat = new Mat();
Imgproc.morphologyEx(src1, openMat, Imgproc.MORPH_OPEN, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, newSize(3)));


// 绘制文字      
// Scalar(0, 0, 255, 255)  bgra
let fontFace = 3; // 字体 (如cv::FONT_HERSHEY_PLAIN)
let fontScale = 2; // 尺寸因子,值越大文字越大
let thickness = 3;
Imgproc.putText(img.mat, "" + i, Point(point.x, point.y), fontFace, fontScale, new Scalar(0, 0, 255, 255), thickness);


// 绘制矩形
Imgproc.rectangle(
        img.mat,
        new Point(eye.boundingRect.tl.x, eye.boundingRect.tl.y),
        new Point(eye.boundingRect.br.x, eye.boundingRect.br.y),
        new Scalar(0, 0, 255, 255),
        6
      );


  //逼近曲线
  //对图像轮廓点进行多边形拟合
  let new_mat = new MatOfPoint2f(contour.toArray());
  let approxCurve_temp = new MatOfPoint2f();
  Imgproc.approxPolyDP(new_mat, approxCurve_temp, 7, true);


// 画圆
radius = 60;
color = new Scalar(0, 255, 0, 255); // bgra
thickness = 2; // 如果是正数,表示组成圆的线条的粗细程度。否则,-1表示圆是否被填充
Imgproc.circle(img.mat, Point(point.x, point.y), radius, color, thickness);


// mat转bitmap
output = Bitmap.createBitmap(resultWidth, resultHeight, Bitmap.Config.ARGB_8888);
org.opencv.android.Utils.matToBitmap(outputMat, output);


// 透视变换
let startM = getStartM(enlargedCoordinates);
let endM = getEndM();
let perspectiveTransform = Imgproc.getPerspectiveTransform(startM, endM);
let outputMat = new Mat();
Imgproc.warpPerspective(img.mat, outputMat, perspectiveTransform, new Size(resultWidth, resultHeight));
/* -------------------------------------------------------------------------- */
function getStartM(pointList) {
  let topLeft = Point(pointList[3].x, pointList[3].y);
  let topRight = Point(pointList[2].x, pointList[2].y);
  let bottomLeft = Point(pointList[0].x, pointList[0].y);
  let bottomRight = Point(pointList[1].x, pointList[1].y);
  let source = new ArrayList();
  source.add(topLeft);
  source.add(topRight);
  source.add(bottomLeft);
  source.add(bottomRight);
  let startM = Converters.vector_Point2f_to_Mat(source);
  return startM;
}
function getEndM() {
  let ocvPOut1 = new Point(0, 0);
  let ocvPOut2 = new Point(resultWidth, 0);
  let ocvPOut3 = new Point(0, resultHeight);
  let ocvPOut4 = new Point(resultWidth, resultHeight);
  let dest = new ArrayList();
  dest.add(ocvPOut1);
  dest.add(ocvPOut2);
  dest.add(ocvPOut3);
  dest.add(ocvPOut4);
  let endM = Converters.vector_Point2f_to_Mat(dest);
  return endM;
}


声明

部分内容来自网络

本教程仅用于学习, 禁止用于其他用途


相关文章
|
7月前
|
XML 编解码 JSON
FFmpeg常用命令讲解及实战二(2)
FFmpeg常用命令讲解及实战二
91 0
|
2月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
205 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
2月前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
5月前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统下编译OpenCV4.8源码
在Ubuntu上源码安装OpenCV 4.8分为三步:1) 下载源码包,使用`wget`命令;2) 安装依赖,如`g++`, `cmake`, `make`等;3) 创建编译目录,运行`cmake`配置,接着`make`编译,最后`sudo make install`安装。安装完成后,通过编写和运行一个简单的OpenCV C++程序来验证环境配置正确性。
155 10
|
5月前
|
计算机视觉 iOS开发 C++
【OpenCV】在MacOS上源码编译OpenCV
【7月更文挑战第9天】在MacOS上源码编译OpenCV需分步进行: 1. 准备工作: 安装Xcode, Command Line Tools及依赖如CMake, Homebrew. 2. 获取OpenCV源码: 从官网下载并解压所需版本. 3. 编译OpenCV. 4. 安装OpenCV: 编译后使用`sudo make install`进行安装. 5. 验证安装: 编写简单C++程序测试OpenCV功能, 如读取并显示图片.
187 1
|
7月前
|
Ubuntu 计算机视觉 C++
Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~
Ubuntu 20.04 编译 Opencv 4.11,详细步骤(带图)及报错解决,我的踩坑之旅~
4601 0
|
7月前
|
并行计算 Ubuntu Linux
Ubuntu 20.04 Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码
Ubuntu 20.04 Anaconda的简单使用以及虚拟环境中编译使用 OpenCV 4.11源码
519 0
|
7月前
|
计算机视觉 C++
Mac系统下vscode调试opencv环境搭建
Mac系统下vscode调试opencv环境搭建
152 1
|
7月前
|
编解码 分布式计算 网络协议
FFmpeg常用命令行讲解及实战一(一)
FFmpeg常用命令行讲解及实战一
245 0
|
7月前
|
编解码
FFmpeg常用命令行讲解及实战一(二)
FFmpeg常用命令行讲解及实战一
82 0