Computer >> Máy Tính >  >> Lập trình >> Java

Làm thế nào để điều chỉnh các dấu chấm lửng xung quanh các đối tượng có thể có trong một hình ảnh bằng OpenCV Java?


Bạn có thể điều chỉnh một hình elip trên một hình dạng bằng cách sử dụng fitEllipse () phương pháp của org.opencv.imgproc.Imgproc lớp. Phương thức này chấp nhận một đối tượng của lớp MatOfPoint2f, tính toán hình elip phù hợp với tập hợp điểm đã cho và trả về đối tượng RotatedRect.

Sử dụng tính năng này, bạn có thể vẽ các hình elip xung quanh các đối tượng có thể có trong một hình ảnh. Để làm như vậy,

  • Đọc hình ảnh bằng cách sử dụng imread () phương thức của lớp Imgproc.

  • Chuyển nó thành hình ảnh thang độ xám bằng cách sử dụng cvtColor () phương thức của lớp Imgproc.

  • Chuyển đổi hình ảnh màu xám sang dạng nhị phân bằng cách sử dụng ngưỡng () phương thức của lớp Imgproc.

  • Tìm các đường viền trong hình ảnh bằng cách sử dụng findContours () phương thức của lớp Imgproc.

  • Bây giờ, hãy tải xuống RotatedRec các đối tượng cho các đường viền có thể bỏ qua từng giá trị đường viền dưới dạng MatOfPoint2f thành fitEllipse () phương pháp .

  • Cuối cùng, vẽ các hình elip xung quanh các hình dạng có thể bằng cách sử dụng ellipse () phương pháp.

Lưu ý - Để vừa với hình elip, đối tượng phải chứa ít nhất năm điểm.

Ví dụ

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();
   }
}

Hình ảnh đầu vào

Làm thế nào để điều chỉnh các dấu chấm lửng xung quanh các đối tượng có thể có trong một hình ảnh bằng OpenCV Java?


Đầu ra

Làm thế nào để điều chỉnh các dấu chấm lửng xung quanh các đối tượng có thể có trong một hình ảnh bằng OpenCV Java?