Erro EXCEPTION_ACCESS_VIOLATION OpenCv

0 respostas
J

Blz, seguinte tenho um algoritmo que peguei no site http://www.larmor.com/portal/
já instalei todas as bibliotecas so que na hora que seleciono o local da imagem que devera ficar fixo o retangulo da um erro

#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7708317f, pid=3412, tid=3848
#
# JRE version: 6.0_14-b08
# Java VM: Java HotSpot(TM) Client VM (14.0-b16 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [ntdll.dll+0x3317f]
#
# An error report file with more information is saved as:
# C:\Users\Jonas\Documents\NetBeansProjects\OpenCV\hs_err_pid3412.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

Pelo que depurei o programa quando ele passa pela linha 166 acontece o erro. Segue a baixo o codigo fonte
package opencv;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;

import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JButton;
import javax.swing.JComponent;

import com.larmor.opencv.MatchTemplate;


public class MovimentoWebCam extends Panel implements ActionListener,
		MouseListener, MouseMotionListener {

	private static Player player = null;
	private CaptureDeviceInfo di = null;
	private MediaLocator ml = null;
	private JButton matchCam = null;
	private JButton selecionaArea = null;
	private Component sourceComp = null;
	private DoubleBufferPanel dbPanel = null;
	private int areaX = 0;
	private int areaY = 0;
	private int areaWidth = 0;
	private int areaHeight = 0;
	private int stateButton;
	private BufferedImage buffImgTemplate = null ;

	public MovimentoWebCam() {

		stateButton = 0;

		setLayout(new BorderLayout());
		// setSize(320,240);

		selecionaArea = new JButton("Selecionar area");
		selecionaArea.addActionListener(this);

		matchCam = new JButton("Começar");
		matchCam.addActionListener(this);
		matchCam.setEnabled(false);

	
		String str2 = "vfw://0";
		//di = new CaptureDeviceInfo(null,new MediaLocator(str2),null);
               
                ml = new MediaLocator(str2);
		//ml = di.getLocator();

		try {
			Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, Boolean.TRUE);
			player = Manager.createRealizedPlayer(ml);
			player.start();

			if ((sourceComp = player.getVisualComponent()) != null) {
				sourceComp.addMouseMotionListener(this);
				sourceComp.addMouseListener(this);
				// sourceComp.setBounds (0, 0,
				// sourceComp.getPreferredSize().width,
				// sourceComp.getPreferredSize().height);

				dbPanel = new DoubleBufferPanel();
				dbPanel.setLayout(new BorderLayout());
				dbPanel.add(sourceComp);
				// dbPanel.setBackground(Color.BLUE);
				// dbPanel.setBounds (0, 0, sourceComp.getPreferredSize().width,
				// sourceComp.getPreferredSize().height);

				add(dbPanel, BorderLayout.CENTER);
			}
			add(selecionaArea, BorderLayout.NORTH);
			add(matchCam, BorderLayout.SOUTH);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	public static void main(String[] args) {
		Frame f = new Frame("Web Cam");
		f.setResizable(false);
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				playerclose();
				System.exit(0);
			}
		});

		MovimentoWebCam cf = new MovimentoWebCam();
		f.add("Center", cf);
		f.pack();
		// f.setSize(new Dimension(320,240));
		f.setVisible(true);

	}

	public static void playerclose() {
		player.close();
		player.deallocate();
	}

	public BufferedImage getPlayerImage() {
		// Pega uma moldura
		FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
		Buffer buf = fgc.grabFrame();

		// Convertê-lo em uma imagem
		BufferToImage btoi = new BufferToImage((VideoFormat) buf.getFormat());
		Image img = btoi.createImage(buf);

		// Converter para BufferedImage
		BufferedImage bi = new BufferedImage(sourceComp.getPreferredSize().width, sourceComp.getPreferredSize().height,	BufferedImage.TYPE_BYTE_GRAY);
		Graphics2D g = bi.createGraphics();
		g.drawImage(img, 0, 0, null);
		g.dispose();

		return bi;
	}

	public synchronized  void  actionPerformed(ActionEvent e) {
		JComponent c = (JComponent) e.getSource();

		if (c == selecionaArea) {
			stateButton = 1;
			player.stop();
			selecionaArea.setEnabled(false);

		} else if (c == matchCam) {

			// Validar Área
			if ((areaX >= 0)&& (areaY > 0)&& (areaWidth > 0)&& (areaHeight > 0)) {
				buffImgTemplate = getPlayerImage().getSubimage(areaX, areaY, areaWidth, areaHeight);
				MatchTemplate.displayBufferedImage(buffImgTemplate, "template");

				stateButton = 2;
				player.start();
				matchCam.setEnabled(false);
				selecionaArea.setEnabled(true);
			}
		}
	}

	// @Override
	public void mouseClicked(MouseEvent arg0) {
	}

	// @Override
	public void mouseEntered(MouseEvent arg0) {
	}

	// @Override
	public void mouseExited(MouseEvent arg0) {
	}

	// @Override
	public void mouseMoved(MouseEvent arg0) {
	}

	// @Override
	public void mousePressed(MouseEvent arg0) {
		arg0.consume();
		if (stateButton == 1) {
			areaX = arg0.getX();
			areaY = arg0.getY();
			dbPanel.repaint();
		}
	}

	// @Override
	public void mouseReleased(MouseEvent arg0) {
		arg0.consume();
		if (stateButton == 1) {
			areaWidth = arg0.getX() - areaX;
			areaHeight = arg0.getY() - areaY;
			dbPanel.repaint();
			matchCam.setEnabled(true);
		}
	}

	// @Override
	public void mouseDragged(MouseEvent arg0) {
		arg0.consume();
		if (stateButton == 1) {
			areaWidth = arg0.getX() - areaX;
			areaHeight = arg0.getY() - areaY;
			dbPanel.repaint();
		}
	}

	class DoubleBufferPanel extends Panel {
		Image offscreen;

		/**
		 * nulo o buffer fora da tela, como parte de invalidação
		 */
		public void invalidate() {
			super.invalidate();
			offscreen = null;
		}

		/**
		 * substituir atualização para * não * apagar o fundo antes da pintura
		 */
		public void update(Graphics g) {
			paint(g);
		}


		public void paint(Graphics g) {

			if (offscreen == null) {
				offscreen = createImage(getSize().width, getSize().height);
			}

			Graphics og = offscreen.getGraphics();
			og.setClip(0, 0, getSize().width, getSize().height);
			super.paint(og);

			if (stateButton == 1) {
				Graphics2D g2 = (Graphics2D) og;
				g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
				g2.setPaint(Color.yellow);
				Rectangle2D e = new Rectangle2D.Float(areaX, areaY, areaWidth, areaHeight);
				g2.draw(e);
			} else if (stateButton == 2) {
				//modelo match
				BufferedImage buffImgSource = getPlayerImage();
				long startTime = System.currentTimeMillis();
				MatchTemplate matchObj = new MatchTemplate(buffImgSource, buffImgTemplate);
				Point matchPoint = matchObj.matchTemplateBestPoint(MatchTemplate.CV_TM_CCOEFF_NORMED);
				long totalTime = System.currentTimeMillis() - startTime;
				System.out.println("Total de tempo para correspondência:" + totalTime);

				Graphics2D g2 = (Graphics2D) og;
				g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
				g2.setPaint(Color.green);
				Rectangle2D e = new Rectangle2D.Float(matchPoint.x, matchPoint.y, areaWidth, areaHeight);
				g2.draw(e);
			}

			g.drawImage(offscreen, 0, 0, null);
			og.dispose();
		}
	}

}
[youtube]http://www.youtube.com/watch?v=TrAM8_Fw3yQ&feature=player_embedded[/youtube]

Estou começando agora nesta parte de imagem, pretendo futuramente criar um sistema de reconhecimento de face em tempo real.
Desde de já agradeço a compreenção de todos.
Abraço

Criado 27 de agosto de 2010
Respostas 0
Participantes 1