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

Làm thế nào để vẽ Đường viền hình ảnh bằng thư viện Java OpenCV?


Đường bao không là gì ngoài đường nối tất cả các điểm dọc theo đường biên của một hình cụ thể. Sử dụng cái này, bạn có thể -

  • Tìm hình dạng của một đối tượng.

  • Tính diện tích của một vật thể.

  • Phát hiện một đối tượng.

  • Nhận ra một đối tượng.

Bạn có thể tìm thấy các đường viền của các hình dạng, đối tượng khác nhau trong một hình ảnh bằng cách sử dụng findContours () phương pháp. Theo cách tương tự, bạn có thể vẽ

Bạn có thể vẽ các đường viền tìm thấy của hình ảnh bằng cách sử dụng drawContours () method this method chấp nhận các tham số sau -

  • Một đối tượng Mat trống để lưu hình ảnh kết quả.

  • Một đối tượng danh sách chứa các đường bao được tìm thấy.

  • Một giá trị số nguyên chỉ định đường bao để vẽ (giá trị -ve để vẽ tất cả chúng).

  • Đối tượng Scalar để chỉ định màu của đường viền.

  • Một giá trị số nguyên để chỉ định độ dày của đường viền.

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.Point;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class DrawingContours {
   public static void main(String args[]) throws Exception {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      String file ="D:\\Images\\shapes.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);
      //Drawing the Contours
      Scalar color = new Scalar(0, 0, 255);
      Imgproc.drawContours(src, contours, -1, color, 2, Imgproc.LINE_8,
      hierarchey, 2, new Point() ) ;
      HighGui.imshow("Drawing Contours", src);
      HighGui.waitKey();
   }
}

Hình ảnh đầu vào

Làm thế nào để vẽ Đường viền hình ảnh bằng thư viện Java OpenCV?

Đầu ra

Khi thực thi, chương trình trên tạo ra cửa sổ sau -

Làm thế nào để vẽ Đường viền hình ảnh bằng thư viện Java OpenCV?