mirror of https://github.com/opencv/opencv.git
parent
c4c1e94088
commit
13317bdfda
5 changed files with 524 additions and 87 deletions
@ -0,0 +1,186 @@ |
||||
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(); |
||||
} |
||||
} |
@ -0,0 +1,115 @@ |
||||
import cv2 |
||||
import numpy as np |
||||
|
||||
W = 400 |
||||
## [my_ellipse] |
||||
def my_ellipse(img, angle): |
||||
thickness = 2 |
||||
line_type = 8 |
||||
|
||||
cv2.ellipse(img, |
||||
(W / 2, W / 2), |
||||
(W / 4, W / 16), |
||||
angle, |
||||
0, |
||||
360, |
||||
(255, 0, 0), |
||||
thickness, |
||||
line_type) |
||||
## [my_ellipse] |
||||
## [my_filled_circle] |
||||
def my_filled_circle(img, center): |
||||
thickness = -1 |
||||
line_type = 8 |
||||
|
||||
cv2.circle(img, |
||||
center, |
||||
W / 32, |
||||
(0, 0, 255), |
||||
thickness, |
||||
line_type) |
||||
## [my_filled_circle] |
||||
## [my_polygon] |
||||
def my_polygon(img): |
||||
line_type = 8 |
||||
|
||||
# Create some points |
||||
ppt = np.array([[W / 4, 7 * W / 8], [3 * W / 4, 7 * W / 8], |
||||
[3 * W / 4, 13 * W / 16], [11 * W / 16, 13 * W / 16], |
||||
[19 * W / 32, 3 * W / 8], [3 * W / 4, 3 * W / 8], |
||||
[3 * W / 4, W / 8], [26 * W / 40, W / 8], |
||||
[26 * W / 40, W / 4], [22 * W / 40, W / 4], |
||||
[22 * W / 40, W / 8], [18 * W / 40, W / 8], |
||||
[18 * W / 40, W / 4], [14 * W / 40, W / 4], |
||||
[14 * W / 40, W / 8], [W / 4, W / 8], |
||||
[W / 4, 3 * W / 8], [13 * W / 32, 3 * W / 8], |
||||
[5 * W / 16, 13 * W / 16], [W / 4, 13 * W / 16]], np.int32) |
||||
ppt = ppt.reshape((-1, 1, 2)) |
||||
cv2.fillPoly(img, [ppt], (255, 255, 255), line_type) |
||||
# Only drawind the lines would be: |
||||
# cv2.polylines(img, [ppt], True, (255, 0, 255), line_type) |
||||
## [my_polygon] |
||||
## [my_line] |
||||
def my_line(img, start, end): |
||||
thickness = 2 |
||||
line_type = 8 |
||||
|
||||
cv2.line(img, |
||||
start, |
||||
end, |
||||
(0, 0, 0), |
||||
thickness, |
||||
line_type) |
||||
## [my_line] |
||||
## [create_images] |
||||
# Windows names |
||||
atom_window = "Drawing 1: Atom" |
||||
rook_window = "Drawing 2: Rook" |
||||
|
||||
# Create black empty images |
||||
size = W, W, 3 |
||||
atom_image = np.zeros(size, dtype=np.uint8) |
||||
rook_image = np.zeros(size, dtype=np.uint8) |
||||
## [create_images] |
||||
## [draw_atom] |
||||
# 1. Draw a simple atom: |
||||
# ----------------------- |
||||
|
||||
# 1.a. Creating ellipses |
||||
my_ellipse(atom_image, 90) |
||||
my_ellipse(atom_image, 0) |
||||
my_ellipse(atom_image, 45) |
||||
my_ellipse(atom_image, -45) |
||||
|
||||
# 1.b. Creating circles |
||||
my_filled_circle(atom_image, (W / 2, W / 2)) |
||||
## [draw_atom] |
||||
## [draw_rook] |
||||
|
||||
# 2. Draw a rook |
||||
# ------------------ |
||||
# 2.a. Create a convex polygon |
||||
my_polygon(rook_image) |
||||
## [rectangle] |
||||
# 2.b. Creating rectangles |
||||
cv2.rectangle(rook_image, |
||||
(0, 7 * W / 8), |
||||
(W, W), |
||||
(0, 255, 255), |
||||
-1, |
||||
8) |
||||
## [rectangle] |
||||
|
||||
# 2.c. Create a few lines |
||||
my_line(rook_image, (0, 15 * W / 16), (W, 15 * W / 16)) |
||||
my_line(rook_image, (W / 4, 7 * W / 8), (W / 4, W)) |
||||
my_line(rook_image, (W / 2, 7 * W / 8), (W / 2, W)) |
||||
my_line(rook_image, (3 * W / 4, 7 * W / 8), (3 * W / 4, W)) |
||||
## [draw_rook] |
||||
cv2.imshow(atom_window, atom_image) |
||||
cv2.moveWindow(atom_window, 0, 200) |
||||
cv2.imshow(rook_window, rook_image) |
||||
cv2.moveWindow(rook_window, W, 200) |
||||
|
||||
cv2.waitKey(0) |
||||
cv2.destroyAllWindows() |
Loading…
Reference in new issue