Skip to content

Commit 0b7020c

Browse files
authored
BAEL-7810: Change lena image with a free portrait from unsplash (#17471)
1 parent 7430341 commit 0b7020c

File tree

5 files changed

+24295
-8937
lines changed

5 files changed

+24295
-8937
lines changed

image-processing/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
<imageio.version>3.3.2</imageio.version>
112112
<tess4j.version>4.5.1</tess4j.version>
113113
<tesseract-platform.version>4.1.0-1.5.2</tesseract-platform.version>
114-
<opencv.version>3.4.2-0</opencv.version>
114+
<opencv.version>4.9.0-0</opencv.version>
115115
<javacv-platform.version>1.5.5</javacv-platform.version>
116116
<webcam-capture.version>0.3.12</webcam-capture.version>
117117
<imgscalr-version>4.2</imgscalr-version>

image-processing/src/main/java/com/baeldung/imageprocessing/opencv/CameraStream.java

+19-23
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
package com.baeldung.imageprocessing.opencv;
22

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;
3+
import java.io.ByteArrayInputStream;
4+
115
import org.opencv.core.Mat;
126
import org.opencv.core.MatOfByte;
137
import org.opencv.core.MatOfRect;
@@ -20,20 +14,28 @@
2014
import org.opencv.objdetect.Objdetect;
2115
import org.opencv.videoio.VideoCapture;
2216

23-
import java.io.ByteArrayInputStream;
17+
import javafx.animation.AnimationTimer;
18+
import javafx.application.Application;
19+
import javafx.scene.Scene;
20+
import javafx.scene.image.Image;
21+
import javafx.scene.image.ImageView;
22+
import javafx.scene.layout.HBox;
23+
import javafx.stage.Stage;
24+
import nu.pattern.OpenCV;
2425

2526
public class CameraStream extends Application {
27+
2628
private VideoCapture capture;
2729

2830
public void start(Stage stage) throws Exception {
2931
OpenCV.loadShared();
30-
capture= new VideoCapture(0); // The number is the ID of the camera
32+
capture = new VideoCapture(0); // The number is the ID of the camera
3133
ImageView imageView = new ImageView();
3234
HBox hbox = new HBox(imageView);
3335
Scene scene = new Scene(hbox);
3436
stage.setScene(scene);
3537
stage.show();
36-
new AnimationTimer(){
38+
new AnimationTimer() {
3739
@Override
3840
public void handle(long l) {
3941
imageView.setImage(getCapture());
@@ -58,7 +60,8 @@ public Image mat2Img(Mat mat) {
5860
MatOfByte bytes = new MatOfByte();
5961
Imgcodecs.imencode("img", mat, bytes);
6062
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes.toArray());
61-
Image img = new Image(inputStream); return img;
63+
Image img = new Image(inputStream);
64+
return img;
6265
}
6366

6467
public static void main(String[] args) {
@@ -70,17 +73,10 @@ public static Mat detectFace(Mat inputImage) {
7073
CascadeClassifier cascadeClassifier = new CascadeClassifier();
7174
int minFaceSize = Math.round(inputImage.rows() * 0.1f);
7275
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 );
76+
cascadeClassifier.detectMultiScale(inputImage, facesDetected, 1.1, 3, Objdetect.CASCADE_SCALE_IMAGE, new Size(minFaceSize, minFaceSize), new Size());
77+
Rect[] facesArray = facesDetected.toArray();
78+
for (Rect face : facesArray) {
79+
Imgproc.rectangle(inputImage, face.tl(), face.br(), new Scalar(0, 0, 255), 3);
8480
}
8581
return inputImage;
8682
}

image-processing/src/main/java/com/baeldung/imageprocessing/opencv/FaceDetection.java

+16-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.baeldung.imageprocessing.opencv;
22

3+
import java.io.ByteArrayInputStream;
4+
35
import org.opencv.core.Mat;
46
import org.opencv.core.MatOfByte;
57
import org.opencv.core.MatOfRect;
@@ -10,38 +12,43 @@
1012
import org.opencv.imgproc.Imgproc;
1113
import org.opencv.objdetect.CascadeClassifier;
1214
import org.opencv.objdetect.Objdetect;
15+
1316
import javafx.scene.image.Image;
14-
import java.io.ByteArrayInputStream;
1517

1618
public class FaceDetection {
1719

20+
public static void main(String[] args) {
21+
// Load the native library.
22+
System.load("/opencv/build/lib/libopencv_java4100.dylib");
23+
detectFace(FaceDetection.class.getClassLoader().getResource("portrait.jpg").getPath(),
24+
"./processed.jpg");
25+
}
26+
1827
public static Mat loadImage(String imagePath) {
19-
Imgcodecs imageCodecs = new Imgcodecs();
20-
return imageCodecs.imread(imagePath);
28+
return Imgcodecs.imread(imagePath);
2129
}
2230

2331
public static void saveImage(Mat imageMatrix, String targetPath) {
24-
Imgcodecs imgcodecs = new Imgcodecs();
25-
imgcodecs.imwrite(targetPath, imageMatrix);
32+
Imgcodecs.imwrite(targetPath, imageMatrix);
2633
}
2734

2835
public static void detectFace(String sourceImagePath, String targetImagePath) {
2936
Mat loadedImage = loadImage(sourceImagePath);
3037
MatOfRect facesDetected = new MatOfRect();
3138
CascadeClassifier cascadeClassifier = new CascadeClassifier();
3239
int minFaceSize = Math.round(loadedImage.rows() * 0.1f);
33-
cascadeClassifier.load("./src/main/resources/haarcascades/haarcascade_frontalface_alt.xml");
40+
String filename = FaceDetection.class.getClassLoader().getResource("haarcascades/haarcascade_frontalface_alt.xml").getFile();
41+
cascadeClassifier.load(filename);
3442
cascadeClassifier.detectMultiScale(loadedImage,
3543
facesDetected,
3644
1.1,
3745
3,
3846
Objdetect.CASCADE_SCALE_IMAGE,
3947
new Size(minFaceSize, minFaceSize),
40-
new Size()
41-
);
48+
new Size());
4249
Rect[] facesArray = facesDetected.toArray();
4350
for(Rect face : facesArray) {
44-
Imgproc.rectangle(loadedImage, face.tl(), face.br(), new Scalar(0, 0, 255), 3 );
51+
Imgproc.rectangle(loadedImage, face.tl(), face.br(), new Scalar(0, 0, 255), 10);
4552
}
4653
saveImage(loadedImage, targetImagePath);
4754
}

0 commit comments

Comments
 (0)