mirror of
https://gitcode.com/gh_mirrors/es/esp32-opencv.git
synced 2025-08-15 19:30:59 +08:00
80 lines
2.5 KiB
Java
80 lines
2.5 KiB
Java
import org.opencv.core.Core;
|
|
import org.opencv.core.Mat;
|
|
import org.opencv.core.Point;
|
|
import org.opencv.core.Scalar;
|
|
import org.opencv.highgui.HighGui;
|
|
import org.opencv.imgproc.Imgproc;
|
|
import org.opencv.video.BackgroundSubtractor;
|
|
import org.opencv.video.Video;
|
|
import org.opencv.videoio.VideoCapture;
|
|
import org.opencv.videoio.Videoio;
|
|
|
|
class BackgroundSubtraction {
|
|
public void run(String[] args) {
|
|
String input = args.length > 0 ? args[0] : "../data/vtest.avi";
|
|
boolean useMOG2 = args.length > 1 ? args[1] == "MOG2" : true;
|
|
|
|
//! [create]
|
|
BackgroundSubtractor backSub;
|
|
if (useMOG2) {
|
|
backSub = Video.createBackgroundSubtractorMOG2();
|
|
} else {
|
|
backSub = Video.createBackgroundSubtractorKNN();
|
|
}
|
|
//! [create]
|
|
|
|
//! [capture]
|
|
VideoCapture capture = new VideoCapture(input);
|
|
if (!capture.isOpened()) {
|
|
System.err.println("Unable to open: " + input);
|
|
System.exit(0);
|
|
}
|
|
//! [capture]
|
|
|
|
Mat frame = new Mat(), fgMask = new Mat();
|
|
while (true) {
|
|
capture.read(frame);
|
|
if (frame.empty()) {
|
|
break;
|
|
}
|
|
|
|
//! [apply]
|
|
// update the background model
|
|
backSub.apply(frame, fgMask);
|
|
//! [apply]
|
|
|
|
//! [display_frame_number]
|
|
// get the frame number and write it on the current frame
|
|
Imgproc.rectangle(frame, new Point(10, 2), new Point(100, 20), new Scalar(255, 255, 255), -1);
|
|
String frameNumberString = String.format("%d", (int)capture.get(Videoio.CAP_PROP_POS_FRAMES));
|
|
Imgproc.putText(frame, frameNumberString, new Point(15, 15), Core.FONT_HERSHEY_SIMPLEX, 0.5,
|
|
new Scalar(0, 0, 0));
|
|
//! [display_frame_number]
|
|
|
|
//! [show]
|
|
// show the current frame and the fg masks
|
|
HighGui.imshow("Frame", frame);
|
|
HighGui.imshow("FG Mask", fgMask);
|
|
//! [show]
|
|
|
|
// get the input from the keyboard
|
|
int keyboard = HighGui.waitKey(30);
|
|
if (keyboard == 'q' || keyboard == 27) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
HighGui.waitKey();
|
|
System.exit(0);
|
|
}
|
|
}
|
|
|
|
public class BackgroundSubtractionDemo {
|
|
public static void main(String[] args) {
|
|
// Load the native OpenCV library
|
|
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
|
|
|
|
new BackgroundSubtraction().run(args);
|
|
}
|
|
}
|