123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- import org.opencv.core.*;
- import org.opencv.core.Point;
- import org.opencv.highgui.HighGui;
- import org.opencv.imgproc.Imgproc;
- import java.util.*;
- import java.util.List;
- class GeometricDrawingRun{
- private static final int W = 400;
- public void run(){
- //! [create_images]
- /// Windows names
- String atom_window = "Drawing 1: Atom";
- String rook_window = "Drawing 2: Rook";
- /// Create black empty images
- Mat atom_image = Mat.zeros( W, W, CvType.CV_8UC3 );
- Mat rook_image = Mat.zeros( W, W, CvType.CV_8UC3 );
- //! [create_images]
- //! [draw_atom]
- /// 1. Draw a simple atom:
- /// -----------------------
- MyEllipse( atom_image, 90.0 );
- MyEllipse( atom_image, 0.0 );
- MyEllipse( atom_image, 45.0 );
- MyEllipse( atom_image, -45.0 );
- /// 1.b. Creating circles
- MyFilledCircle( atom_image, new Point( W/2, W/2) );
- //! [draw_atom]
- //! [draw_rook]
- /// 2. Draw a rook
- /// ------------------
- /// 2.a. Create a convex polygon
- MyPolygon( rook_image );
- //! [rectangle]
- /// 2.b. Creating rectangles
- Imgproc.rectangle( rook_image,
- new Point( 0, 7*W/8 ),
- new Point( W, W),
- new Scalar( 0, 255, 255 ),
- -1,
- 8,
- 0 );
- //! [rectangle]
- /// 2.c. Create a few lines
- MyLine( rook_image, new Point( 0, 15*W/16 ), new Point( W, 15*W/16 ) );
- MyLine( rook_image, new Point( W/4, 7*W/8 ), new Point( W/4, W ) );
- MyLine( rook_image, new Point( W/2, 7*W/8 ), new Point( W/2, W ) );
- MyLine( rook_image, new Point( 3*W/4, 7*W/8 ), new Point( 3*W/4, W ) );
- //! [draw_rook]
- /// 3. Display your stuff!
- HighGui.imshow( atom_window, atom_image );
- HighGui.moveWindow( atom_window, 0, 200 );
- HighGui.imshow( rook_window, rook_image );
- HighGui.moveWindow( rook_window, W, 200 );
- HighGui.waitKey( 0 );
- System.exit(0);
- }
- /// Function Declaration
- /**
- * @function MyEllipse
- * @brief Draw a fixed-size ellipse with different angles
- */
- //! [my_ellipse]
- private void MyEllipse( Mat img, double angle ) {
- int thickness = 2;
- int lineType = 8;
- int shift = 0;
- Imgproc.ellipse( img,
- new Point( W/2, W/2 ),
- new Size( W/4, W/16 ),
- angle,
- 0.0,
- 360.0,
- new Scalar( 255, 0, 0 ),
- thickness,
- lineType,
- shift );
- }
- //! [my_ellipse]
- /**
- * @function MyFilledCircle
- * @brief Draw a fixed-size filled circle
- */
- //! [my_filled_circle]
- private void MyFilledCircle( Mat img, Point center ) {
- int thickness = -1;
- int lineType = 8;
- int shift = 0;
- Imgproc.circle( img,
- center,
- W/32,
- new Scalar( 0, 0, 255 ),
- thickness,
- lineType,
- shift );
- }
- //! [my_filled_circle]
- /**
- * @function MyPolygon
- * @function Draw a simple concave polygon (rook)
- */
- //! [my_polygon]
- private void MyPolygon( Mat img ) {
- int lineType = 8;
- int shift = 0;
- /** Create some points */
- Point[] rook_points = new Point[20];
- rook_points[0] = new Point( W/4, 7*W/8 );
- rook_points[1] = new Point( 3*W/4, 7*W/8 );
- rook_points[2] = new Point( 3*W/4, 13*W/16 );
- rook_points[3] = new Point( 11*W/16, 13*W/16 );
- rook_points[4] = new Point( 19*W/32, 3*W/8 );
- rook_points[5] = new Point( 3*W/4, 3*W/8 );
- rook_points[6] = new Point( 3*W/4, W/8 );
- rook_points[7] = new Point( 26*W/40, W/8 );
- rook_points[8] = new Point( 26*W/40, W/4 );
- rook_points[9] = new Point( 22*W/40, W/4 );
- rook_points[10] = new Point( 22*W/40, W/8 );
- rook_points[11] = new Point( 18*W/40, W/8 );
- rook_points[12] = new Point( 18*W/40, W/4 );
- rook_points[13] = new Point( 14*W/40, W/4 );
- rook_points[14] = new Point( 14*W/40, W/8 );
- rook_points[15] = new Point( W/4, W/8 );
- rook_points[16] = new Point( W/4, 3*W/8 );
- rook_points[17] = new Point( 13*W/32, 3*W/8 );
- rook_points[18] = new Point( 5*W/16, 13*W/16 );
- rook_points[19] = new Point( W/4, 13*W/16 );
- MatOfPoint matPt = new MatOfPoint();
- matPt.fromArray(rook_points);
- List<MatOfPoint> ppt = new ArrayList<MatOfPoint>();
- ppt.add(matPt);
- Imgproc.fillPoly(img,
- ppt,
- new Scalar( 255, 255, 255 ),
- lineType,
- shift,
- new Point(0,0) );
- }
- //! [my_polygon]
- /**
- * @function MyLine
- * @brief Draw a simple line
- */
- //! [my_line]
- private void MyLine( Mat img, Point start, Point end ) {
- int thickness = 2;
- int lineType = 8;
- int shift = 0;
- Imgproc.line( img,
- start,
- end,
- new Scalar( 0, 0, 0 ),
- thickness,
- lineType,
- shift );
- }
- //! [my_line]
- }
- public class BasicGeometricDrawing {
- public static void main(String[] args) {
- // Load the native library.
- System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
- new GeometricDrawingRun().run();
- }
- }
|