Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我试图从我的网络摄像头中捕获图像时,它会拍摄一张全黑的图像_Java - Fatal编程技术网

Java 当我试图从我的网络摄像头中捕获图像时,它会拍摄一张全黑的图像

Java 当我试图从我的网络摄像头中捕获图像时,它会拍摄一张全黑的图像,java,Java,我下载了一个与我的网络摄像头交互的。我正在尝试添加通过网络摄像头拍照的功能,或者只是捕获当前图像并将其保存在我的C:目录中 我创建了一个名为Capture(startC)的按钮,并创建了一个ActionListener ActionListener startC.addActionListener(new ActionListener() { @Override public void actionPerfor

我下载了一个与我的网络摄像头交互的。我正在尝试添加通过网络摄像头拍照的功能,或者只是捕获当前图像并将其保存在我的C:目录中

我创建了一个名为Capture(startC)的按钮,并创建了一个ActionListener

ActionListener

startC.addActionListener(new ActionListener()
        {           
            @Override
            public void actionPerformed(ActionEvent e)
            {               
                  // Grab a frame                 
                 FrameGrabbingControl fgc = new FrameGrabbingControl() {

                        @Override
                        public Component getControlComponent() {
                            // TODO Auto-generated method stub
                            return null;
                        }                       

                        @Override
                        public Buffer grabFrame() {
                            // return null;
                            return new Buffer();
                        }
                    };  
                  player.getControl("javax.media.control.FrameGrabbingControl");    
                  buf = fgc.grabFrame();                  

                  // Convert it to an image               
                  BufferToImage btoi = new BufferToImage((VideoFormat)buf.getFormat());
                  // btoi = new BufferToImage((VideoFormat)buf.getFormat());    
                  img = btoi.createImage(buf);       

                  // show the image 
                  //imgpanel.setImage(img);       

                  // save image 
                  try {
                    saveJPG(img,"c:\\test.jpg");                    
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }   
            }
        });
startC.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Vector devices = CaptureDeviceManager.getDeviceList(null);
                CaptureDeviceInfo cdi = null;
                for (Iterator i = devices.iterator(); i.hasNext();) {
                    cdi = (CaptureDeviceInfo) i.next();
                    /*
                     * Get the first Video For Windows (VFW) capture device. Use
                     * the JMF registry tool in the bin directory of the JMF
                     * distribution to detect available capture devices on your
                     * computer.
                     */
                    if (cdi.getName().startsWith("vfw:"))
                        break;
                }

                try {
                    player = Manager.createRealizedPlayer(cdi.getLocator());
                    player.start();
                } catch (NoPlayerException e2) {
                    e2.printStackTrace();
                } catch (CannotRealizeException e3) {
                    e3.printStackTrace();
                } catch (IOException e4) {
                    e4.printStackTrace();
                }

                // start the Timer with 3s intervals
                new Timer(3000, this).start();

                // Grab a frame from the capture device
                FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
                buf = fgc.grabFrame();
                BufferToImage btoi = new BufferToImage((VideoFormat) buf
                        .getFormat());
                img = btoi.createImage(buf);
});
更新的ActionListener

startC.addActionListener(new ActionListener()
        {           
            @Override
            public void actionPerformed(ActionEvent e)
            {               
                  // Grab a frame                 
                 FrameGrabbingControl fgc = new FrameGrabbingControl() {

                        @Override
                        public Component getControlComponent() {
                            // TODO Auto-generated method stub
                            return null;
                        }                       

                        @Override
                        public Buffer grabFrame() {
                            // return null;
                            return new Buffer();
                        }
                    };  
                  player.getControl("javax.media.control.FrameGrabbingControl");    
                  buf = fgc.grabFrame();                  

                  // Convert it to an image               
                  BufferToImage btoi = new BufferToImage((VideoFormat)buf.getFormat());
                  // btoi = new BufferToImage((VideoFormat)buf.getFormat());    
                  img = btoi.createImage(buf);       

                  // show the image 
                  //imgpanel.setImage(img);       

                  // save image 
                  try {
                    saveJPG(img,"c:\\test.jpg");                    
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }   
            }
        });
startC.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Vector devices = CaptureDeviceManager.getDeviceList(null);
                CaptureDeviceInfo cdi = null;
                for (Iterator i = devices.iterator(); i.hasNext();) {
                    cdi = (CaptureDeviceInfo) i.next();
                    /*
                     * Get the first Video For Windows (VFW) capture device. Use
                     * the JMF registry tool in the bin directory of the JMF
                     * distribution to detect available capture devices on your
                     * computer.
                     */
                    if (cdi.getName().startsWith("vfw:"))
                        break;
                }

                try {
                    player = Manager.createRealizedPlayer(cdi.getLocator());
                    player.start();
                } catch (NoPlayerException e2) {
                    e2.printStackTrace();
                } catch (CannotRealizeException e3) {
                    e3.printStackTrace();
                } catch (IOException e4) {
                    e4.printStackTrace();
                }

                // start the Timer with 3s intervals
                new Timer(3000, this).start();

                // Grab a frame from the capture device
                FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
                buf = fgc.grabFrame();
                BufferToImage btoi = new BufferToImage((VideoFormat) buf
                        .getFormat());
                img = btoi.createImage(buf);
});
SaveJPG方法

      public static void saveJPG(Image img, String s) throws IOException    
      {       
        BufferedImage bi = new BufferedImage(640, 480, BufferedImage.TYPE_INT_RGB);
        File outputfile = new File("C:\\saved.jpg");
        ImageIO.write(bi, "png", outputfile);
}
问题是,当我单击“捕获”时,它只是保存了一个全黑的屏幕,而这不是网络摄像头的焦点所在

有人能帮忙吗

@更新

第520行=
buf=fgc.grabFrame()


已经有一段时间了,但请尝试:

public static void saveJPG(Image img, String s) throws IOException { 
    File outputfile = new File("C:\\saved.jpg"); 
    ImageIO.write(img, "jpg", outputfile); 
}

已经有一段时间了,但请尝试:

public static void saveJPG(Image img, String s) throws IOException { 
    File outputfile = new File("C:\\saved.jpg"); 
    ImageIO.write(img, "jpg", outputfile); 
}

通过搜索和谷歌搜索,我找到了解决问题的方法

解决方案

startC.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                OpenCVWebCam webCam = (OpenCVWebCam) cam;
                try {
                    webCam.start();
                } catch (Exception e3) {                    
                    e3.printStackTrace();
                }

                OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
                try {
                    grabber.start();
                } catch (Exception e3) {            
                    e3.printStackTrace();
                }

                try {
                    IplImage frame = grabber.grab();
                    BufferedImage out = frame.getBufferedImage();   
                    File outputfile = new File("c:\\saved.png");
                    ImageIO.write(out, "png", outputfile);
                } catch (Exception e2) {                    
                    e2.printStackTrace();
                }
}
});
目标已达到,图像已保存。之后,图像保存在我的服务器中,在我的控制台选项卡中出现一条消息

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x776a224d, pid=5864, tid=5576
#
# JRE version: 7.0_05-b05
# Java VM: Java HotSpot(TM) Client VM (23.1-b03 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [ntdll.dll+0x3224d]  EtwEventEnabled+0x1ca
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\lucas\workspace\WebcamApplet\bin\hs_err_pid5864.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

通过搜索和谷歌搜索,我找到了解决问题的方法

解决方案

startC.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                OpenCVWebCam webCam = (OpenCVWebCam) cam;
                try {
                    webCam.start();
                } catch (Exception e3) {                    
                    e3.printStackTrace();
                }

                OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
                try {
                    grabber.start();
                } catch (Exception e3) {            
                    e3.printStackTrace();
                }

                try {
                    IplImage frame = grabber.grab();
                    BufferedImage out = frame.getBufferedImage();   
                    File outputfile = new File("c:\\saved.png");
                    ImageIO.write(out, "png", outputfile);
                } catch (Exception e2) {                    
                    e2.printStackTrace();
                }
}
});
目标已达到,图像已保存。之后,图像保存在我的服务器中,在我的控制台选项卡中出现一条消息

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x776a224d, pid=5864, tid=5576
#
# JRE version: 7.0_05-b05
# Java VM: Java HotSpot(TM) Client VM (23.1-b03 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [ntdll.dll+0x3224d]  EtwEventEnabled+0x1ca
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\Users\lucas\workspace\WebcamApplet\bin\hs_err_pid5864.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

@凯瑟,我的问题很清楚。是的,但这不是链接的内容。
public static void saveJPG(Image img,String s)抛出IOException{BufferedImage bi=new BufferedImage(640480,BufferedImage.TYPE_INT_RGB);File outputfile=new File(“C:\\saved.jpg”);ImageIO.write(bi,“png”,outputfile);}
->您根本没有使用img。。。因此,您正在保存一个新的空实例BufferedImage@Fildor这是我的
saveJPG
方法。我的
saveJPG
方法怎么样?@Keyser,我的问题很清楚。是的,但这不是链接的内容。
public static void saveJPG(图像img,字符串s)抛出IOException{BufferedImage bi=new BufferedImage(640480,BufferedImage.TYPE_INT_RGB);File outputfile=new File(“C:\\saved.jpg”);ImageIO.write(bi,“png”,outputfile);}
->您根本没有使用img。。。因此,您正在保存一个新的空实例BufferedImage@Fildor这是我的
saveJPG
方法。我的
saveJPG
方法怎么样?您给saveJPG的映像实例是
null
。因此,请检查您的图像检索。您在saveJPG中提供的图像实例为
null
。因此,请检查您的图像检索。