在netbeans java中使用网络摄像头拍照?

时间:2016-04-17 16:55:28

标签: java mysql netbeans webcam

过去几天我一直忙于尝试让网络摄像头在netbeans中工作。 我遇到的问题是使用网络摄像头激活编码并拍照。

到目前为止,我已经看到我将不得不使用OpenCV和其他一些JAR文件。 请有人通过完善我下面的编码来帮助我:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // coding for webcam and taking a picture
    OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
    try
    {
        //start of the webcam for taking the picture
        grabber.start();
        Image IM = this.takePicture();
        //stops the webcam            
        grabber.stop();      


    }
    catch (Exception e)
    {
        //displays error message if problem with webcam
        JOptionPane.showMessageDialog(null, "Problem accessing or using the Webcam!");
    }

} 

我需要的是在拍完照片后我的界面上的标签显示图片。

已经成功安装了Open CV,现在只需要进行编码即可。

任何帮助都会有所帮助。

2 个答案:

答案 0 :(得分:1)

好的,您的编码有点偏,它确实需要对其进行一些更改。然而,你走在正确的轨道上。

我的示例代码可以帮助您解决哪些问题:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        // coding for webcam and taking a picture
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        try
        {
            //start of the webcam for taking the picture
            grabber.start();
            //grabs teh image taken from the webcam
            IplImage img = grabber.grab();            
            //checks if the webcam has taken the picture and if the picture if mot empty
            if(img != null)
            {
                //determines where to save the picture
                cvSaveImage("C:\\User1\\PrifilePicture\\"+lbl_StudnetLogin.getText()+".jpeg", img);                         
            }
            //stops the webcam            
            grabber.stop();
            //used to resize teh picture taken in order to display picture to the user      
            Image imeResize = ImageIO.read(new File("C:\\SalVentri\\PrifilePicture\\"+lbl_StudnetLogin.getText()+".jpeg"));
            //1st ---> width _______2sn ---> height
            lbl_Profile.setIcon(new ImageIcon(imeResize.getScaledInstance(155, 100, 100)));

        }
        catch (Exception e)
        {
            //displays error message if problem with webcam
            JOptionPane.showMessageDialog(null, "Problem accessing or using the Webcam!");
        }

    } 

希望这有帮助

答案 1 :(得分:0)

我发现这也有效。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

import org.opencv.core.*;
import org.opencv.highgui.Highgui;        
import org.opencv.highgui.VideoCapture;        

public class JPanelOpenCV extends JPanel{

BufferedImage image;

public static void main (String args[]) throws InterruptedException{
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    JPanelOpenCV t = new JPanelOpenCV();
    VideoCapture camera = new VideoCapture(0);

    Mat frame = new Mat();
    camera.read(frame); 

    if(!camera.isOpened()){
        System.out.println("Error");
    }
    else {                  
        while(true){        

            if (camera.read(frame)){

                BufferedImage image = t.MatToBufferedImage(frame);

                t.window(image, "Original Image", 0, 0);

                t.window(t.grayscale(image), "Processed Image", 40, 60);

                //t.window(t.loadImage("ImageName"), "Image loaded", 0, 0);

                break;
            }
        }   
    }
    camera.release();
}

@Override
public void paint(Graphics g) {
    g.drawImage(image, 0, 0, this);
}

public JPanelOpenCV() {
}

public JPanelOpenCV(BufferedImage img) {
    image = img;
}   

//Show image on window
public void window(BufferedImage img, String text, int x, int y) {
    JFrame frame0 = new JFrame();
    frame0.getContentPane().add(new JPanelOpenCV(img));
    frame0.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame0.setTitle(text);
    frame0.setSize(img.getWidth(), img.getHeight() + 30);
    frame0.setLocation(x, y);
    frame0.setVisible(true);
}

//Load an image
public BufferedImage loadImage(String file) {
    BufferedImage img;

    try {
        File input = new File(file);
        img = ImageIO.read(input);

        return img;
    } catch (Exception e) {
        System.out.println("erro");
    }

    return null;
}

//Save an image
public void saveImage(BufferedImage img) {        
    try {
        File outputfile = new File("Images/new.png");
        ImageIO.write(img, "png", outputfile);
    } catch (Exception e) {
        System.out.println("error");
    }
}

//Grayscale filter
public BufferedImage grayscale(BufferedImage img) {
    for (int i = 0; i < img.getHeight(); i++) {
        for (int j = 0; j < img.getWidth(); j++) {
            Color c = new Color(img.getRGB(j, i));

            int red = (int) (c.getRed() * 0.299);
            int green = (int) (c.getGreen() * 0.587);
            int blue = (int) (c.getBlue() * 0.114);

            Color newColor =
                    new Color(
                    red + green + blue,
                    red + green + blue,
                    red + green + blue);

            img.setRGB(j, i, newColor.getRGB());
        }
    }

    return img;
}

public BufferedImage MatToBufferedImage(Mat frame) {
    //Mat() to BufferedImage
    int type = 0;
    if (frame.channels() == 1) {
        type = BufferedImage.TYPE_BYTE_GRAY;
    } else if (frame.channels() == 3) {
        type = BufferedImage.TYPE_3BYTE_BGR;
    }
    BufferedImage image = new BufferedImage(frame.width(), frame.height(), type);
    WritableRaster raster = image.getRaster();
    DataBufferByte dataBuffer = (DataBufferByte) raster.getDataBuffer();
    byte[] data = dataBuffer.getData();
    frame.get(0, 0, data);

    return image;
}

}

相关问题