mirror of https://github.com/opencv/opencv.git
parent
defeda2f70
commit
4bea70a64a
10 changed files with 292 additions and 297 deletions
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,79 @@ |
|||||||
|
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); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
from __future__ import print_function |
||||||
|
import cv2 as cv |
||||||
|
import argparse |
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='This program shows how to use background subtraction methods provided by \ |
||||||
|
OpenCV. You can process both videos and images.') |
||||||
|
parser.add_argument('--input', type=str, help='Path to a video or a sequence of image.', default='../data/vtest.avi') |
||||||
|
parser.add_argument('--algo', type=str, help='Background subtraction method (KNN, MOG2).', default='MOG2') |
||||||
|
args = parser.parse_args() |
||||||
|
|
||||||
|
## [create] |
||||||
|
#create Background Subtractor objects |
||||||
|
if args.algo == 'MOG2': |
||||||
|
backSub = cv.createBackgroundSubtractorMOG2() |
||||||
|
else: |
||||||
|
backSub = cv.createBackgroundSubtractorKNN() |
||||||
|
## [create] |
||||||
|
|
||||||
|
## [capture] |
||||||
|
capture = cv.VideoCapture(args.input) |
||||||
|
if not capture.isOpened: |
||||||
|
print('Unable to open: ' + args.input) |
||||||
|
exit(0) |
||||||
|
## [capture] |
||||||
|
|
||||||
|
while True: |
||||||
|
ret, frame = capture.read() |
||||||
|
if frame is None: |
||||||
|
break |
||||||
|
|
||||||
|
## [apply] |
||||||
|
#update the background model |
||||||
|
fgMask = backSub.apply(frame) |
||||||
|
## [apply] |
||||||
|
|
||||||
|
## [display_frame_number] |
||||||
|
#get the frame number and write it on the current frame |
||||||
|
cv.rectangle(frame, (10, 2), (100,20), (255,255,255), -1) |
||||||
|
cv.putText(frame, str(capture.get(cv.CAP_PROP_POS_FRAMES)), (15, 15), |
||||||
|
cv.FONT_HERSHEY_SIMPLEX, 0.5 , (0,0,0)) |
||||||
|
## [display_frame_number] |
||||||
|
|
||||||
|
## [show] |
||||||
|
#show the current frame and the fg masks |
||||||
|
cv.imshow('Frame', frame) |
||||||
|
cv.imshow('FG Mask', fgMask) |
||||||
|
## [show] |
||||||
|
|
||||||
|
keyboard = cv.waitKey(30) |
||||||
|
if keyboard == 'q' or keyboard == 27: |
||||||
|
break |
Loading…
Reference in new issue