1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.openimaj.demos.sitestuff;
31
32 import java.io.File;
33 import java.util.ArrayList;
34 import java.util.List;
35
36 import org.openimaj.demos.sandbox.image.gif.GifSequenceWriter;
37 import org.openimaj.image.DisplayUtilities;
38 import org.openimaj.image.Image;
39 import org.openimaj.image.MBFImage;
40 import org.openimaj.image.colour.ColourSpace;
41 import org.openimaj.image.processing.resize.ResizeProcessor;
42 import org.openimaj.video.VideoDisplay;
43 import org.openimaj.video.VideoDisplayListener;
44 import org.openimaj.video.capture.VideoCapture;
45 import org.openimaj.video.capture.VideoCaptureException;
46
47 public class VideoProcessingSiteDemo {
48 public static void main(String[] args) throws VideoCaptureException {
49 VideoCapture cap = new VideoCapture(640, 480);
50 final List<Image<?,?>> frames = new ArrayList<Image<?,?>>();
51 VideoDisplay.createOffscreenVideoDisplay(cap).addVideoListener(new VideoDisplayListener<MBFImage>() {
52 MBFImage last;
53 int nWritten = 0;
54 @Override
55 public void beforeUpdate(MBFImage frame) {
56 if(frame==null) return;
57 MBFImage combined = new MBFImage(frame.getWidth()*2,frame.getHeight(),ColourSpace.RGB);
58 combined.drawImage(frame, 0, 0);
59 if(last != null){
60 combined.drawImage(
61 frame.subtract(last).abs(), frame.getWidth(),0
62 );
63 }
64 last = frame.clone();
65 combined.processInplace(new ResizeProcessor(400, 300));
66 DisplayUtilities.displayName(combined, "combined");
67 frames.add(combined);
68 if(frames.size()%60 == 0){
69 try {
70 File gifOut = new File("/Users/ss/Desktop/videoProc/"+ "out_" + nWritten + ".gif");
71 GifSequenceWriter.writeGif(frames,200, true, gifOut);
72 frames.clear();
73 System.out.println("GIF written: " + gifOut);
74 nWritten++;
75 } catch (Exception e) {
76 }
77 }
78 }
79
80 @Override
81 public void afterUpdate(VideoDisplay<MBFImage> display) {
82
83 }
84 });
85 }
86 }