mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
5.5 KiB
186 lines
5.5 KiB
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(); |
|
} |
|
}
|
|
|