import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingWorker;
import com.googlecode.javacpp.Loader;
import com.googlecode.javacv.*;
import com.googlecode.javacv.cpp.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
@SuppressWarnings("serial")
public class CFrameTest extends JFrame {
JButton jbtStart;
JButton jbtStop;
CanvasFrame frame;
FrameGrabber grabber;
IplImage grabbedImage;
public CFrameTest() {
super("test");
setSize(250, 100);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(1, 2));
jbtStart = new JButton("Start camera");
jbtStop = new JButton("Stop camera");
this.add(jbtStart);
this.add(jbtStop);
setVisible(true);
jbtStart.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Startcap");
jbtStart.setEnabled(false);
jbtStop.setEnabled(true);
try {
(new CameraSwingWorker()).execute();
/*startCamera();*/
} catch (Exception ex) {
Logger.getLogger(CFrameTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
jbtStop.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Stopcap");
jbtStart.setEnabled(true);
jbtStop.setEnabled(false);
frame.setVisible(false);
}
});
Loader.load(opencv_objdetect.class);
}
public static void main(String[] args) {
CFrameTest testFrame = new CFrameTest();
}
public void startCamera() throws Exception {
frame = new CanvasFrame("Test");
grabber = new OpenCVFrameGrabber(0);
CvMemStorage storage = CvMemStorage.create();
grabber.start();
grabbedImage = grabber.grab();
while (frame.isVisible() && (grabbedImage = grabber.grab()) != null)
{
BufferedImage bfimg = grabbedImage.getBufferedImage();
//grabbedImage.copyTo(bfimg);
frame.showImage(bfimg);
//frame.showImage(grabbedImage);
cvClearMemStorage(storage);
}
grabber.stop();
}
class CameraSwingWorker extends SwingWorker<String, Object> {
@Override
public String doInBackground() {
try {
startCamera();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "yeah";
}
@Override
protected void done() {
try {} catch (Exception ignore) {
}
}
}
}
/*javax.swing.SwingWorker*/
可以很容易地在AWT圖像轉換爲緩衝的圖像。 IplImage本身公開了一個方法來做到這一點,我認爲這將是令人羨慕的。但由於swt的其他問題,團隊決定切換回擺動狀態,我們不需要再轉換圖像了......感謝您的幫助! – 2011-03-24 16:24:09