Java
 Computer >> コンピューター >  >> プログラミング >> Java

OpenCV Javaを使用して、画像内の可能なオブジェクトの周りに省略記号を合わせるにはどうすればよいですか?


fitEllipse()を使用して、図形の上に楕円を合わせることができます の方法 org.opencv.imgproc.Imgproc クラス。このメソッドは、MatOfPoint2fクラスのオブジェクトを受け入れ、指定されたポイントのセットに適合する楕円を計算し、RotatedRectオブジェクトを返します。

これを使用すると、画像内の可能なオブジェクトの周りに楕円を描くことができます。そのためには、

  • imread()を使用して画像を読みます Imgprocクラスのメソッド。

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

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

  • findContours()を使用して、画像内の輪郭を見つけます Imgprocクラスのメソッド。

  • 次に、 RotatedRecを取得します 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を使用して、画像内の可能なオブジェクトの周りに省略記号を合わせるにはどうすればよいですか?


出力

OpenCV Javaを使用して、画像内の可能なオブジェクトの周りに省略記号を合わせるにはどうすればよいですか?



  1. Java OpenCVライブラリを使用してカラー画像をグレースケールに変換するにはどうすればよいですか?

    cvtColor() Imgprocのメソッド クラスは、画像の色を変更/変換します。このメソッドは3つのパラメーターを受け入れます- src −ソースを表すMatrixオブジェクト。 dst −宛先を表すMatrixオブジェクト。 コード −宛先画像の色を表す整数値。 カラー画像をグレースケールに変換するには、 Imgproc.COLOR_RGB2GRAYを渡す必要があります このメソッドの3番目のパラメータとして。 例 import org.opencv.core.Core; import org.opencv.core.Mat; import org

  2. Java OpenCVライブラリを使用してイメージを作成するにはどうすればよいですか?

    OpenCVライブラリを使用すると、画像フィルタリング、幾何学的画像変換、色空間変換、ヒストグラムなどの画像処理操作を実行できます。 画像を書く Imgcodecsクラスのimread()メソッドを使用して画像のコンテンツを読み取るたびに、結果がMatrixオブジェクトに読み込まれます。 imwrite()メソッドを使用してイメージを書き込み/保存できます。これは2つのパラメータ、つまり-を受け入れます ファイル −結果を保存するファイルパスを表す文字列値。 Img −保存する画像のデータを含むマトリックスオブジェクト。 例 次のJavaの例は画像の内容を読み取りますc