Skip to content

Commit 0ab76cd

Browse files
authored
Added code for open-cv (eugenp#8657)
* Added code for open-cv * moved code over to image-processing directory
1 parent c8514ce commit 0ab76cd

5 files changed

Lines changed: 24498 additions & 1 deletion

File tree

image-processing/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@
3535
</exclusion>
3636
</exclusions>
3737
</dependency>
38+
<dependency>
39+
<groupId>org.openpnp</groupId>
40+
<artifactId>opencv</artifactId>
41+
<version>3.4.2-0</version>
42+
</dependency>
3843
<dependency>
3944
<groupId>com.twelvemonkeys.imageio</groupId>
4045
<artifactId>imageio-core</artifactId>
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.baeldung.imageprocessing.opencv;
2+
3+
import javafx.animation.AnimationTimer;
4+
import javafx.application.Application;
5+
import javafx.scene.Scene;
6+
import javafx.scene.image.Image;
7+
import javafx.scene.image.ImageView;
8+
import javafx.scene.layout.HBox;
9+
import javafx.stage.Stage;
10+
import nu.pattern.OpenCV;
11+
import org.opencv.core.Mat;
12+
import org.opencv.core.MatOfByte;
13+
import org.opencv.core.MatOfRect;
14+
import org.opencv.core.Rect;
15+
import org.opencv.core.Scalar;
16+
import org.opencv.core.Size;
17+
import org.opencv.imgcodecs.Imgcodecs;
18+
import org.opencv.imgproc.Imgproc;
19+
import org.opencv.objdetect.CascadeClassifier;
20+
import org.opencv.objdetect.Objdetect;
21+
import org.opencv.videoio.VideoCapture;
22+
23+
import java.io.ByteArrayInputStream;
24+
25+
public class CameraStream extends Application {
26+
private VideoCapture capture;
27+
28+
public void start(Stage stage) throws Exception {
29+
OpenCV.loadShared();
30+
capture= new VideoCapture(0); // The number is the ID of the camera
31+
ImageView imageView = new ImageView();
32+
HBox hbox = new HBox(imageView);
33+
Scene scene = new Scene(hbox);
34+
stage.setScene(scene);
35+
stage.show();
36+
new AnimationTimer(){
37+
@Override
38+
public void handle(long l) {
39+
imageView.setImage(getCapture());
40+
}
41+
}.start();
42+
}
43+
44+
public Image getCapture() {
45+
Mat mat = new Mat();
46+
capture.read(mat);
47+
return mat2Img(mat);
48+
}
49+
50+
public Image getCaptureWithFaceDetection() {
51+
Mat mat = new Mat();
52+
capture.read(mat);
53+
Mat haarClassifiedImg = detectFace(mat);
54+
return mat2Img(haarClassifiedImg);
55+
}
56+
57+
public Image mat2Img(Mat mat) {
58+
MatOfByte bytes = new MatOfByte();
59+
Imgcodecs.imencode("img", mat, bytes);
60+
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes.toArray());
61+
Image img = new Image(inputStream); return img;
62+
}
63+
64+
public static void main(String[] args) {
65+
Application.launch(args);
66+
}
67+
68+
public static Mat detectFace(Mat inputImage) {
69+
MatOfRect facesDetected = new MatOfRect();
70+
CascadeClassifier cascadeClassifier = new CascadeClassifier();
71+
int minFaceSize = Math.round(inputImage.rows() * 0.1f);
72+
cascadeClassifier.load("./src/main/resources/haarcascades/haarcascade_frontalface_alt.xml");
73+
cascadeClassifier.detectMultiScale(inputImage,
74+
facesDetected,
75+
1.1,
76+
3,
77+
Objdetect.CASCADE_SCALE_IMAGE,
78+
new Size(minFaceSize, minFaceSize),
79+
new Size()
80+
);
81+
Rect[] facesArray = facesDetected.toArray();
82+
for(Rect face : facesArray) {
83+
Imgproc.rectangle(inputImage, face.tl(), face.br(), new Scalar(0, 0, 255), 3 );
84+
}
85+
return inputImage;
86+
}
87+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.baeldung.imageprocessing.opencv;
2+
3+
import org.opencv.core.Mat;
4+
import org.opencv.core.MatOfByte;
5+
import org.opencv.core.MatOfRect;
6+
import org.opencv.core.Rect;
7+
import org.opencv.core.Scalar;
8+
import org.opencv.core.Size;
9+
import org.opencv.imgcodecs.Imgcodecs;
10+
import org.opencv.imgproc.Imgproc;
11+
import org.opencv.objdetect.CascadeClassifier;
12+
import org.opencv.objdetect.Objdetect;
13+
import javafx.scene.image.Image;
14+
import java.io.ByteArrayInputStream;
15+
16+
public class FaceDetection {
17+
18+
public static Mat loadImage(String imagePath) {
19+
Imgcodecs imageCodecs = new Imgcodecs();
20+
return imageCodecs.imread(imagePath);
21+
}
22+
23+
public static void saveImage(Mat imageMatrix, String targetPath) {
24+
Imgcodecs imgcodecs = new Imgcodecs();
25+
imgcodecs.imwrite(targetPath, imageMatrix);
26+
}
27+
28+
public static void detectFace(String sourceImagePath, String targetImagePath) {
29+
Mat loadedImage = loadImage(sourceImagePath);
30+
MatOfRect facesDetected = new MatOfRect();
31+
CascadeClassifier cascadeClassifier = new CascadeClassifier();
32+
int minFaceSize = Math.round(loadedImage.rows() * 0.1f);
33+
cascadeClassifier.load("./src/main/resources/haarcascades/haarcascade_frontalface_alt.xml");
34+
cascadeClassifier.detectMultiScale(loadedImage,
35+
facesDetected,
36+
1.1,
37+
3,
38+
Objdetect.CASCADE_SCALE_IMAGE,
39+
new Size(minFaceSize, minFaceSize),
40+
new Size()
41+
);
42+
Rect[] facesArray = facesDetected.toArray();
43+
for(Rect face : facesArray) {
44+
Imgproc.rectangle(loadedImage, face.tl(), face.br(), new Scalar(0, 0, 255), 3 );
45+
}
46+
saveImage(loadedImage, targetImagePath);
47+
}
48+
49+
public Image mat2Img(Mat mat) {
50+
MatOfByte bytes = new MatOfByte();
51+
Imgcodecs.imencode("img", mat, bytes);
52+
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes.toArray());
53+
Image img = new Image(inputStream); return img;
54+
}
55+
56+
}

0 commit comments

Comments
 (0)