开发者社区> 小凡晓宇> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

autojs从书的中间分割成两张

简介: 牙叔教程 简单易懂
+关注继续查看

牙叔教程 简单易懂

群里有人问

image

思路

提取书本中间的线-> 切开


提取书本中间的线

Canny 边缘检测

image


Imgproc.Canny(grayMat, cannyMat, lowThreshold, lowThreshold * ratio, kernel_size, false);


霍夫变换直线检测

image


function getHoughLinesP(mat, size) {
  let lines = new Mat();
  let threshold = size / 5; // 阈值,只有获得足够交点的极坐标点才被看成是直线
  let minLineSize = size; // 最小直线长度,有默认值0,表示最低线段的长度,比这个设定参数短的线段就不能被显现出来。
  let lineGap = size; // 最大间隔,有默认值0,允许将同一行点与点之间连接起来的最大的距离。
  Imgproc.HoughLinesP(mat, lines, 1, Math.PI / 180, threshold, minLineSize, lineGap);
  return lines;
}


过滤直线

直线的横坐标应该在图片中间

image


function filterLineDataList(lines) {
  // { angle: 90, distance: 786, x1: 4, y1: 925, x2: 4, y2: 139 },
  let newLines = [];
  var len = lines.length;
  let centerX = img.width / 2;
  for (var i = 0; i < len; i++) {
    let line = lines[i];
    if (Math.abs(line.x1 - centerX) < img.width / 4 && Math.abs(line.x2 - centerX) < img.width / 4) {
      newLines.push(line);
    }
  }
  return newLines;
}


计算切割点

计算直线和上下两边的交点

image


function getFocusCoordinatesOfTwoLines(line1, line2) {
  var x1 = line1.x1;
  var y1 = line1.y1;
  var x2 = line1.x2;
  var y2 = line1.y2;
  var x3 = line2.x1;
  var y3 = line2.y1;
  var x4 = line2.x2;
  var y4 = line2.y2;
  var x =
    ((x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4)) /
    ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));
  var y =
    ((x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)) /
    ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));
  return { x: x, y: y };
}


分割图片

image image


let clipImg = images.clip(img, 0, 0, leftPageTopSideLength, img.height);
pts.add(new MatOfPoint(topLeftPoint, topRightPoint, bottomRightPoint, bottomLeftPoint, topLeftPoint));
Imgproc.fillPoly(polyMat, pts, Scalar(255), 1);
Core.bitwise_and(clipImg.mat, newPolyMat, newMat);


测试环境
手机: Mi 11 Pro
Android版本: 12
Autojs版本: 9.1.10


名人名言

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

声明

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



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
autojs加载中界面
牙叔教程 简单易懂
23 0
#yyds干货盘点# 【React工作记录五十一】创建一个promise对象
#yyds干货盘点# 【React工作记录五十一】创建一个promise对象
10 0
【大安全开发部-数字规划团队】使用Beego搭建Go语言的Restful API项目
此文章是Go语言开发项目的入门篇,hello word级别,主要讲解基于框架开发go项目的搭建过程
98 0
使用ack-ram-authenticator完成ACK容器集群身份验证
如果你是[ACK容器集群](https://cs.console.aliyun.com)(AlibabaCloud Container Service for Kubernetes)的管理员,你可能经常需要为其他的普通开发者角色创建不同的RAM子账户并进行授权操作,当需要对多个开发人员授予相同ACK集群操作权限时,为每个开发者创建子账号并授权就显得太过重复和繁琐了。 本文基于[ack-ram
178 0
Spring Cloud Alibaba基础教程:Nacos的数据持久化
通过之前几篇关于Nacos的博文,对于Nacos分别作为服务注册中心以及配置中心时,与Spring Cloud体系结合的基础使用方法已经介绍完毕了。下面我们再用几篇博文从生产部署的角度,介绍Nacos的相关内容。本文我们将具体说说Nacos的数据存储以及生产配置的推荐。
3464 0
windows中使用Git如何创建Pull Requests(拉取请求/下载请求)?
Pull Requests用于提出对项目文件的更改,它是一个开始提交讨论的方式,它被经常用于代码审查中。   如果是一个人工作的话,那么Pull Request可能没有太大的帮助,因为可以用学到的git命令来更改、推送到我们的主分支中,而不存在其他的分支。
1230 0
《电路分析导论(原书第12版)》一导读
本书第1版于40年前出版,至今已翻译成6种语言,发行超过了100万册。所以,我很高兴为该教材的第12版再写前言,并首先对本教材出版过程的所有参与者,以及那些认为本教材满足了学科需求的全体使用者致以诚挚的谢意。 新版内容的变化
3820 0
+关注
329
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载