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™ 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
[code]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();
}
}
}[/code]
[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