ホームページ  >  記事  >  Java  >  OpenCV Javaを使用して、画像に楕円を当てはめて、可能なオブジェクトを囲むにはどうすればよいですか?

OpenCV Javaを使用して、画像に楕円を当てはめて、可能なオブジェクトを囲むにはどうすればよいですか?

WBOY
WBOY転載
2023-08-28 14:37:05564ブラウズ

org.opencv.imgproc.Imgproc クラスの fitEllipse() メソッドを使用して、楕円の形状をフィットさせることができます。このメソッドは、MatOfPoint2f クラスのオブジェクトを受け取り、指定された点のセットに適合する楕円を計算し、RotatedRect オブジェクトを返します。

このメソッドを使用すると、画像内のオブジェクトの周囲に楕円を描くことができます。これを行うには、Imgproc クラスの imread()

メソッドを使用してイメージを読み取ります。
  • Imgproc クラスの cvtColor()

    メソッドを使用して、グレースケール イメージに変換します。
  • Imgproc クラスの threshold()

    メソッドを使用して、グレースケール イメージをバイナリ イメージに変換します。
  • Imgproc クラスの findContours()

    メソッドを使用して、画像内の輪郭を見つけます。
  • 次に、各等高線値を MatOfPoint2f として fitEllipse()

    メソッドに渡し、可能な輪郭 #オブジェクト。
  • 最後に、ellipse() メソッドを使用して、可能な形状の周囲に楕円を描画します。

  • - 楕円をフィットさせるには、オブジェクトに少なくとも 5 つの点が含まれている必要があります。

  • import java.util.ArrayList;
    import java.util.List;
    import org.opencv.core.Core;
    import org.opencv.core.Mat;
    import org.opencv.core.MatOfPoint;
    import org.opencv.core.MatOfPoint2f;
    import org.opencv.core.RotatedRect;
    import org.opencv.core.Scalar;
    import org.opencv.highgui.HighGui;
    import org.opencv.imgcodecs.Imgcodecs;
    import org.opencv.imgproc.Imgproc;
    public class FitEllipseExample {
       public static void main(String args[]) throws Exception {
          //Loading the OpenCV core library
          System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
          //Reading the contents of the image
          String file ="D:\Images\javafx_graphical.jpg";
          Mat src = Imgcodecs.imread(file);
          //Converting the source image to binary
          Mat gray = new Mat(src.rows(), src.cols(), src.type());
          Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
          Mat binary = new Mat(src.rows(), src.cols(), src.type(), new Scalar(0));
          Imgproc.threshold(gray, binary, 100, 255, Imgproc.THRESH_BINARY_INV);
          //Finding Contours
          List<MatOfPoint> contours = new ArrayList<>();
          Mat hierarchey = new Mat();
          Imgproc.findContours(binary, contours, hierarchey, Imgproc.RETR_TREE,
          Imgproc.CHAIN_APPROX_SIMPLE);
          //Empty rectangle
          RotatedRect[] rec = new RotatedRect[contours.size()];
          for (int i = 0; i < contours.size(); i++) {
             rec[i] = new RotatedRect();
             if (contours.get(i).rows() > 5) {
                rec[i] = Imgproc.fitEllipse(new MatOfPoint2f(contours.get(i).toArray()));
             }
             Scalar color_elli = new Scalar(190, 0, 0);
             Imgproc.ellipse(src, rec[i], color_elli, 5);
          }
          HighGui.imshow("Contours operation", src);
          HighGui.waitKey();
       }
    }

    入力画像

以上がOpenCV Javaを使用して、画像に楕円を当てはめて、可能なオブジェクトを囲むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。