牙叔教程 简单易懂
群里有人问

原图

填充颜色后

思路
提取蓝线–> 提取红线–> 提取坐标–> 填充颜色
提取蓝色
- 使用ps拾色器或者其他软件的吸管, 多吸取几个蓝色点
然后分解颜色的rgb分量, 代入到方法中
let lowColor = colors.rgb(lowRGB.red, lowRGB.green, lowRGB.blue);
let highColor = colors.rgb(highRGB.red, highRGB.green, highRGB.blue);
let newImg = images.inRange(img, lowColor, highColor);
复制代码
提取出来的蓝色区域

- 观察到, 中间有些位置是断开的, 我们稍微膨胀一下
Imgproc.morphologyEx(
newImg.mat,
mat,
Imgproc.MORPH_DILATE,
Imgproc.getStructuringElement(Imgproc.MORPH_RECT, Size(3, 3))
);
复制代码

- 画出该图片的轮廓, 轮廓用绿色填充
Imgproc.findContours(mat, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE, Point());
Imgproc.drawContours(img.mat, contours, -1, Scalar(0, 255, 0, 255), -1, 8);
复制代码

- 获取轮廓的最小外接矩形
let box = Imgproc.minAreaRect(new MatOfPoint2f(contours.get(0).toArray()));
for (let j = 0; j < 4; j++) {
Imgproc.line(img.mat, rect[j], rect[(j + 1) % 4], Scalar(0, 255, 0, 255), 1, 8);
}
复制代码

- 提取矩形两端的坐标
一端取第一个点, 另一端取第三个点
画出两个点所在的直线
Imgproc.line(img.mat, rect[0], rect[2], Scalar(0, 255, 0, 255), 1, 8);
复制代码

- 同理获取蓝线的坐标

- 四个点都获取完成, 再用opencv绘制四边形
Imgproc.fillPoly(polyMat, pts, Scalar(0, 255, 0, 255), 1);
Core.addWeighted(img.mat, alpha, polyMat, beta, gamma, matAddWeighted);
复制代码

测试环境
手机: Mi 11 Pro
Android版本: 12
Autojs版本: 9.1.10
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问 — 牙叔教程
声明
部分内容来自网络 本教程仅用于学习, 禁止用于其他用途\
微信公众号 牙叔教程
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END




![如何将 int[] 转换为 List<Integer>? | Java Debug 笔记-一一网](https://www.proyy.com/wp-content/uploads/2024/10/load.gif )













![[02/27][官改] Simplicity@MIX2 ROM更新-一一网](https://www.proyy.com/wp-content/uploads/2020/02/3168457341.jpg)


![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)