Autojsカラーは赤い線と青い線の間の部分を塗りつぶします

おじさんの歯のチュートリアルはシンプルで理解しやすいです

グループの誰かが尋ねた

元の画像

色を塗りつぶした後

アイデア

青い線を抽出->赤い線を抽出->座標を抽出->色を塗りつぶす

青を抽出

  1. 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);
复制代码

抽出された青い領域

  1. 真ん中のいくつかの位置が切断されていることに注意してください。少し拡大します
Imgproc.morphologyEx(
  newImg.mat,
  mat,
  Imgproc.MORPH_DILATE,
  Imgproc.getStructuringElement(Imgproc.MORPH_RECT, Size(3, 3))
);
复制代码

  1. 画像の輪郭を描き、輪郭を緑色で塗りつぶします
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);
复制代码

  1. 等高線の最小境界矩形を取得します
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);
}
复制代码

  1. 長方形の両端の座標を抽出します
    一方の端で最初の点を取り、もう一方の端で3番目の点を取ります
    2つの点の間に直線を描きます
Imgproc.line(img.mat, rect[0], rect[2], Scalar(0, 255, 0, 255), 1, 8);
复制代码

  1. 同様に、青い線の座標を取得します

  1. 4つのポイントすべてが取得され、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

有名人の引用

のアイデアは最も重要であり、他のBaidu、bing、stackoverflow、github、Androidドキュメント、autojsドキュメント、そして最後に尋ねるグループ---UncleToothチュートリアル

免責事項
コンテンツの一部はインターネットからのものですこのチュートリアルは学習のみを目的としており、他の目的で使用することは禁止されています\

WeChatパブリックアカウントの歯のおじさんのチュートリアル

おすすめ

転載: juejin.im/post/7078586942626988040