blob: 7ecd98a928441ef6e4473d362f35f18596e53db1 [file] [log] [blame]
jerrymcb7a06a2013-02-17 22:32:29 +00001package org.frc971;
2
3import java.awt.event.KeyEvent;
4import java.io.File;
5import java.io.IOException;
6
7import javax.imageio.ImageIO;
8import javax.swing.WindowConstants;
9
10import com.googlecode.javacv.CanvasFrame;
11
12import edu.wpi.first.wpijavacv.WPIColorImage;
13
14/* REQUIRED JAVA LIBRARIES:
15 * Program Files/SmartDashboard/
16 * extensions/lib/javacpp.jar
17 * extensions/lib/javacv-YOUR_OS.jar
18 * extensions/lib/javacv.jar
19 * extensions/lib/WPIJavaCV.jar
20 * SmartDashboard.jar -- maybe in the future
21 * extensions/WPICameraExtension.jar -- maybe in the future
22 *
23 * REQUIRED NATIVE CODE LIBRARIES:
24 * Program Files/WPIJavaCV/
25 * JavaCV_2.2.0/javacv-bin/javacv-YOUR_OS.jar
26 * OpenCV_2.2.0/bin/*
27 */
28/**
29 * FRC 2013 vision-target recognizer tuner app.
30 *
31 * @author jerry
32 */
33public class VisionTuner {
34 private String[] testImageFilenames;
35 private WPIColorImage[] testImages;
36 private final CanvasFrame cameraFrame = new CanvasFrame("Camera");
37 private int currentIndex = 0;
38
39 public VisionTuner(String[] imageFilenames) {
40 cameraFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
41 cameraFrame.setFocusable(true);
42 cameraFrame.requestFocus();
43
44 loadTestImages(imageFilenames);
45 }
46
47
48 /**
49 * Loads the named test image files.
50 * Sets testImageFilenames and testImages.
51 */
52 private void loadTestImages(String[] imageFilenames) {
53 testImageFilenames = imageFilenames;
54 testImages = new WPIColorImage[testImageFilenames.length];
55
56 for (int i = 0; i < testImageFilenames.length; i++) {
57 String imageFilename = testImageFilenames[i];
58
59 System.out.println("Loading image file: " + imageFilename);
60 WPIColorImage rawImage = null;
61 try {
62 rawImage = new WPIColorImage(ImageIO.read(new File(imageFilename)));
63 } catch (IOException e) {
64 System.err.println("Couldn't load image file: " + imageFilename + ": " + e.getMessage());
65 System.exit(1);
66 return;
67 }
68 testImages[i] = rawImage;
69 }
70 }
71
72 private void processCurrentImage() {
73 WPIColorImage rawImage = testImages[currentIndex];
74 cameraFrame.showImage(rawImage.getBufferedImage());
75 cameraFrame.setTitle(testImageFilenames[currentIndex]);
76 }
77
78 private void previousImage() {
79 if (currentIndex > 0) {
80 --currentIndex;
81 }
82 processCurrentImage();
83 }
84
85 private void nextImage() {
86 if (currentIndex + 1 < testImages.length) {
87 ++currentIndex;
88 }
89 processCurrentImage();
90 }
91
92 private void processEvents() {
93 KeyEvent e = cameraFrame.waitKey();
94
95 switch (e.getKeyCode()) {
96 case KeyEvent.VK_LEFT:
97 previousImage();
98 break;
99 case KeyEvent.VK_RIGHT:
100 nextImage();
101 break;
102 }
103 }
104
105 public static void main(final String[] args) {
106 if (args.length == 0) {
107 System.err.println("Usage: " + VisionTuner.class.getName()
108 + " test image filenames...");
109 System.exit(1);
110 }
111
112 VisionTuner tuner = new VisionTuner(args);
113 tuner.processCurrentImage();
114
115 for (;;) {
116 tuner.processEvents();
117 }
118 }
119
120}