use of boofcv.gui.image.ImagePanel in project BoofCV by lessthanoptimal.
the class ExampleCollectImages method main.
public static void main(String[] args) {
// Open a webcam at a resolution close to 640x480
Webcam webcam = Webcam.getWebcams().get(0);
UtilWebcamCapture.adjustResolution(webcam, 640, 480);
webcam.open();
// Create the panel used to display the image
ImagePanel gui = new ImagePanel();
gui.setPreferredSize(webcam.getViewSize());
gui.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
saveImage = true;
}
});
ShowImages.showWindow(gui, "Webcam", true);
int total = 0;
while (true) {
BufferedImage image = webcam.getImage();
if (saveImage) {
System.out.println("Saving image " + total);
saveImage = false;
UtilImageIO.saveImage(image, String.format("image%04d.png", (total++)));
}
gui.setImageUI(image);
}
}
use of boofcv.gui.image.ImagePanel in project BoofCV by lessthanoptimal.
the class ExampleWebcamJavaCV method main.
public static void main(String[] args) {
WebcamOpenCV webcam = new WebcamOpenCV();
SimpleImageSequence sequence = webcam.open("0", 1280, 960, ImageType.pl(3, GrayU8.class));
BufferedImage output = new BufferedImage(sequence.getNextWidth(), sequence.getNextHeight(), BufferedImage.TYPE_INT_RGB);
ImagePanel gui = new ImagePanel(output);
ShowImages.showWindow(gui, "Webam using JavaCV", true);
while (sequence.hasNext()) {
ImageBase gray = sequence.next();
ConvertBufferedImage.convertTo(gray, output, true);
gui.repaint();
}
}
use of boofcv.gui.image.ImagePanel in project BoofCV by lessthanoptimal.
the class TestSimulatePlanarWorld method main.
public static void main(String[] args) {
GrayF32 image = new GrayF32(400, 300);
GImageMiscOps.fill(image, 255);
GImageMiscOps.fillRectangle(image, 90, 20, 20, 40, 40);
GImageMiscOps.fillRectangle(image, 90, 60, 60, 40, 40);
GImageMiscOps.fillRectangle(image, 90, 100, 20, 40, 40);
GImageMiscOps.fillRectangle(image, 90, 300, 200, 60, 60);
Se3_F64 rectToWorld = new Se3_F64();
rectToWorld.T.set(0, 0, -0.2);
// ConvertRotation3D_F64.eulerToMatrix(EulerType.XYZ,0,1.0,0,rectToWorld.R);
rectToWorld = rectToWorld.invert(null);
Se3_F64 rectToWorld2 = new Se3_F64();
rectToWorld2.T.set(0, -0.20, 0.3);
String fisheyePath = UtilIO.pathExample("fisheye/theta/");
CameraUniversalOmni model = CalibrationIO.load(new File(fisheyePath, "front.yaml"));
SimulatePlanarWorld alg = new SimulatePlanarWorld();
alg.setCamera(model);
alg.addTarget(rectToWorld, 0.3, image);
alg.addTarget(rectToWorld2, 0.15, image);
alg.render();
BufferedImage output = new BufferedImage(model.width, model.height, BufferedImage.TYPE_INT_RGB);
ConvertBufferedImage.convertTo(alg.getOutput(), output);
ImagePanel panel = ShowImages.showWindow(output, "Rendered Fisheye", true);
for (int i = 0; i < 2000; i++) {
alg.getImageRect(0).rectToWorld.T.x = 0.7 * Math.sin(i * 0.01);
ConvertRotation3D_F64.eulerToMatrix(EulerType.XYZ, 0, 0, i * 0.05, alg.getImageRect(1).rectToWorld.R);
alg.render();
ConvertBufferedImage.convertTo(alg.getOutput(), output);
panel.repaint();
BoofMiscOps.sleep(10);
}
}
use of boofcv.gui.image.ImagePanel in project BoofCV by lessthanoptimal.
the class ExamplePoseOfCalibrationTarget method main.
public static void main(String[] args) {
// Load camera calibration
CameraPinholeRadial intrinsic = CalibrationIO.load(UtilIO.pathExample("calibration/mono/Sony_DSC-HX5V_Chess/intrinsic.yaml"));
LensDistortionNarrowFOV lensDistortion = new LensDistortionRadialTangential(intrinsic);
// load the video file
String fileName = UtilIO.pathExample("tracking/chessboard_SonyDSC_01.mjpeg");
SimpleImageSequence<GrayF32> video = DefaultMediaManager.INSTANCE.openVideo(fileName, ImageType.single(GrayF32.class));
// DefaultMediaManager.INSTANCE.openCamera(null, 640, 480, ImageType.single(GrayF32.class));
// Let's use the FiducialDetector interface since it is much easier than coding up
// the entire thing ourselves. Look at FiducialDetector's code if you want to understand how it works.
CalibrationFiducialDetector<GrayF32> detector = FactoryFiducial.calibChessboard(new ConfigChessboard(4, 5, 0.03), GrayF32.class);
detector.setLensDistortion(lensDistortion, intrinsic.width, intrinsic.height);
// Get the 2D coordinate of calibration points for visualization purposes
List<Point2D_F64> calibPts = detector.getCalibrationPoints();
// Set up visualization
PointCloudViewer viewer = new PointCloudViewer(intrinsic, 0.01);
// make the view more interest. From the side.
DMatrixRMaj rotY = ConvertRotation3D_F64.rotY(-Math.PI / 2.0, null);
viewer.setWorldToCamera(new Se3_F64(rotY, new Vector3D_F64(0.75, 0, 1.25)));
ImagePanel imagePanel = new ImagePanel(intrinsic.width, intrinsic.height);
viewer.setPreferredSize(new Dimension(intrinsic.width, intrinsic.height));
PanelGridPanel gui = new PanelGridPanel(1, imagePanel, viewer);
gui.setMaximumSize(gui.getPreferredSize());
ShowImages.showWindow(gui, "Calibration Target Pose", true);
// Allows the user to click on the image and pause
MousePauseHelper pauseHelper = new MousePauseHelper(gui);
// saves the target's center location
List<Point3D_F64> path = new ArrayList<>();
// Process each frame in the video sequence
Se3_F64 targetToCamera = new Se3_F64();
while (video.hasNext()) {
// detect calibration points
detector.detect(video.next());
if (detector.totalFound() == 1) {
detector.getFiducialToCamera(0, targetToCamera);
// Visualization. Show a path with green points and the calibration points in black
viewer.reset();
Point3D_F64 center = new Point3D_F64();
SePointOps_F64.transform(targetToCamera, center, center);
path.add(center);
for (Point3D_F64 p : path) {
viewer.addPoint(p.x, p.y, p.z, 0x00FF00);
}
for (int j = 0; j < calibPts.size(); j++) {
Point2D_F64 p = calibPts.get(j);
Point3D_F64 p3 = new Point3D_F64(p.x, p.y, 0);
SePointOps_F64.transform(targetToCamera, p3, p3);
viewer.addPoint(p3.x, p3.y, p3.z, 0);
}
}
imagePanel.setImage((BufferedImage) video.getGuiImage());
viewer.repaint();
imagePanel.repaint();
BoofMiscOps.pause(30);
while (pauseHelper.isPaused()) {
BoofMiscOps.pause(30);
}
}
}
Aggregations