Search in sources :

Example 11 with ImagePanel

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);
    }
}
Also used : MouseEvent(java.awt.event.MouseEvent) MouseAdapter(java.awt.event.MouseAdapter) Webcam(com.github.sarxos.webcam.Webcam) BufferedImage(java.awt.image.BufferedImage) ImagePanel(boofcv.gui.image.ImagePanel)

Example 12 with ImagePanel

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();
    }
}
Also used : SimpleImageSequence(boofcv.io.image.SimpleImageSequence) GrayU8(boofcv.struct.image.GrayU8) BufferedImage(java.awt.image.BufferedImage) ConvertBufferedImage(boofcv.io.image.ConvertBufferedImage) ImageBase(boofcv.struct.image.ImageBase) ImagePanel(boofcv.gui.image.ImagePanel)

Example 13 with ImagePanel

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);
    }
}
Also used : GrayF32(boofcv.struct.image.GrayF32) CameraUniversalOmni(boofcv.struct.calib.CameraUniversalOmni) File(java.io.File) BufferedImage(java.awt.image.BufferedImage) ConvertBufferedImage(boofcv.io.image.ConvertBufferedImage) Se3_F64(georegression.struct.se.Se3_F64) ImagePanel(boofcv.gui.image.ImagePanel)

Example 14 with ImagePanel

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);
        }
    }
}
Also used : Point3D_F64(georegression.struct.point.Point3D_F64) LensDistortionNarrowFOV(boofcv.alg.distort.LensDistortionNarrowFOV) DMatrixRMaj(org.ejml.data.DMatrixRMaj) ArrayList(java.util.ArrayList) LensDistortionRadialTangential(boofcv.alg.distort.radtan.LensDistortionRadialTangential) Vector3D_F64(georegression.struct.point.Vector3D_F64) PanelGridPanel(boofcv.gui.PanelGridPanel) GrayF32(boofcv.struct.image.GrayF32) CameraPinholeRadial(boofcv.struct.calib.CameraPinholeRadial) Point2D_F64(georegression.struct.point.Point2D_F64) PointCloudViewer(boofcv.gui.d3.PointCloudViewer) ConfigChessboard(boofcv.abst.fiducial.calib.ConfigChessboard) Se3_F64(georegression.struct.se.Se3_F64) ImagePanel(boofcv.gui.image.ImagePanel) MousePauseHelper(boofcv.gui.MousePauseHelper)

Aggregations

ImagePanel (boofcv.gui.image.ImagePanel)14 BufferedImage (java.awt.image.BufferedImage)11 ConvertBufferedImage (boofcv.io.image.ConvertBufferedImage)9 GrayF32 (boofcv.struct.image.GrayF32)6 Webcam (com.github.sarxos.webcam.Webcam)4 ConfigGeneralDetector (boofcv.abst.feature.detect.interest.ConfigGeneralDetector)2 PointTrack (boofcv.abst.feature.tracker.PointTrack)2 PointToPixelTransform_F32 (boofcv.alg.distort.PointToPixelTransform_F32)2 LensDistortionRadialTangential (boofcv.alg.distort.radtan.LensDistortionRadialTangential)2 PkltConfig (boofcv.alg.tracker.klt.PkltConfig)2 CameraPinholeRadial (boofcv.struct.calib.CameraPinholeRadial)2 GrayU8 (boofcv.struct.image.GrayU8)2 ImageBase (boofcv.struct.image.ImageBase)2 Planar (boofcv.struct.image.Planar)2 Se3_F64 (georegression.struct.se.Se3_F64)2 MouseAdapter (java.awt.event.MouseAdapter)2 MouseEvent (java.awt.event.MouseEvent)2 ArrayList (java.util.ArrayList)2 ConfigDeformPointMLS (boofcv.abst.distort.ConfigDeformPointMLS)1 PointDeformKeyPoints (boofcv.abst.distort.PointDeformKeyPoints)1